Pandasのデータ操作まとめ

![header002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667780/cd5fe1e0-72d1-a3e2-6d7f-be1e18a3f56d.jpeg)


### 読み込み・保存・書き出し
CSVファイルの読み込み

```python
df = pd.read_csv('パス')
```
CSVファイルの書き出し

```python
pd.Series(y, name='pred').to_csv('submission.csv', index=None)
```
pickleファイルへ保存

```python
pd.to_pickle(forest, 'ファイル名.pkl')
```
***

### PandasのDataFrameに変換

```python
df = pd.DataFrame(x,columns = coulumns)
```
***

### 表示する

```python
df.shape #行・列の数
df.type() #データの型
df.info() #データ数と型
df.nunique() #ユニークな値の数
df.isnull().sum() #欠損値の数
df.head() #上から5行表示
df.tail() #下から5行表示
df.describe() #要約統計量の確認
df.describe(include='all') #文字列も含めて確認
df.index #行名
df.coulumns #列名
```
***

### 相関関係を確認

```python
df_corr
df_corr[df_corr > 0.99] #0.99以上を表示、それ以外をNan
```
***

### 切り出す

```python
df.iloc[:, 0] #全ての行の0列目
df.iloc[:, 1:] #全ての行の1列目〜最後の列まで
df.loc[:, 'SAMPLE'] #全ての行の'SAMPLE'列
df.loc[:,['SAMPLE1', 'SAMPLE2']] #全ての行の'SAMPLE1'列と'SAMPLE2'列
```
***
### 条件付きでデータを切り出す

```python
df['name'].str.contains('li') #name列の文字列liを含む要素をTrueにする
df.filter(like='apple', axis=0) #行名・列名が部分一致する行・列を抽出: 引数like
```
***

### 条件付きでデータを切り出す（比較演算子①）

```python
df > 0 #0より大きければTrue
df[df > 0] #Trueのところだけ値が残り、FalseはNan(欠損値）になる
df['C'] > 0 #C1列の0より大きいデータをTrue
df[df['C']] > 0 #C1列の0より大きいデータの全体の行だけ表示
```
***

### 条件付きでデータを切り出す（比較演算子②）

```python
df[df['Origin'] == 3].head() #'Origin'が3
df[(df['Origin'] == 3) & (df['Weight'] >= 2000)].head() #'Origin'が3で'Weight'が2000以上
df[(df['Origin'] != 1) | (df['Weight'] > 3000)].sort_values('MPG').head() #'Origin'が1ではない、もしくは'Weight'が3000より大きいデータを'MPG'が小さい順に表示
df['Class'][df['Class'] == 0.0].shape #Class列の0.0の行を表示
```
***

### 並べ替え

```python
df.sort_value('Weight').head() #'Weight'が小さい順 
df.sort_value('Weight', ascending = False).head() #'Weight'が大きい順
```
***

### 追加・削除

```python
df['Origin'] = origin # Origin列を作成し、originを代入
# 注意：データフレームの行数と新しく入れる行数が同じことが条件
df = df.drop(labels='Origin', axis=1) # 'Origin'の列方向を削除
```
***

### 置き換え

```python
df['A'].replace('M', 1) #A列のMを1に置き換え
```
***

### 欠損値の処理
dropna：欠損しているデータを削除

```python
df.dropna() #欠損値がある行を全て削除
df['C2'].dropna() #C2列の欠損値がある行を削除
df.dropna(thresh = 3) #3つ欠損値がある行を全て削除
```

fillna:欠損値を別の値で埋める

```python
df['C2'].fillna(df['C2'].mean()) #C2列の欠損値をC2の平均値で埋める
```
***

### カテゴリカルなデータ

```python
df['C1'].value.counts() #カテゴリとデータの数を確認
df[df['C1'] == 'A'] #特定のカテゴリのデータだけを取り出す
df_obj = df.select_dtypes(include='object') #カテゴリカル変数を含んだデータのみを抽出
```
***

### 平均値でグループ化

```python
df.group('Origin').mean
```
***

### クロス集計

```python
pd.crosstab(df['Cylimders'], df['Origin'])
```
***

### ピポッドテーブル

```python
pd.pivot_table(df, value='MPG', index='Model Year', columns='Origin', aggfunc='mena')
```
***

###  おまけ
####  統計量の表記の意味
- count:値の数

- mean:平均値

- std:標準偏差

- min:最小値

- 25%:第一四分位数

- 50%:第二四分位数（中央値）

- 75%:第三四分位数

- max:最大値

***

参考リンク
[Pandasのメソッド一覧](http://www.tomohiko9090.com/?p=26)
[pandasで特定の文字列を含む行を抽出（完全一致、部分一致）](https://note.nkmk.me/python-pandas-str-contains-match/)
[条件を満たす行名・列名の行・列を抽出（選択）](https://note.nkmk.me/python-pandas-index-columns-select/)
[【初心者向け】データ分析で必須のPandasを入門しよう！](https://aiacademy.jp/media/?p=152)
[並べ替え]([https://note.nkmk.me/python-pandas-sort-values-sort-index/](https://note.nkmk.me/python-pandas-sort-values-sort-index/))