Pythonデータ分析 | 前処理で高頻出なpandasメソッド

Pythonデータ分析の前処理で、意外と利用機会の多い便利なメソッドを紹介します。また最後に、データ分析の流れを経験できる初心者にオススメ学習コンテンツを紹介しますので、ご参考ください。

## 必要なライブラリ

```py
import pandas as pd
```

## サンプルデータ

```py
df_score = pd.DataFrame({
    'ID': ['A001', 'A002', 'A002', 'A003', 'A004', 'A005', 'A006', 'A007', 'A007', 'A008', 'A009', 'A010', 'A011', 'A012'], 
    '部署': ['営業', '営業', '営業', '営業', '経理', '経理', '人事', '人事', '人事', '生産', '生産', '総務', '社長室', '社長室'], 
    '役職': ['部長', None, None, None, '課長', None, None, None, None, '課長', None, None, None, None], 
    '姓': ['山田', '高橋', '高橋', '野口', '池田', '北本', '森田', '伊藤', '伊藤', '花田', '鈴木', '佐藤', '木下', '江口'], 
    '名': ['弘樹', '優斗', '優斗', '美咲', '裕子', '雄太', '健司', '奈央', '奈央', '武', '雄介', '瑞樹', '智子', '悟'], 
    'スコア': [52, 56, 47, 67, 32, 57, 46, 83, 70, 49, 55, 38, 39, 62]
    })
```

[![Image from Gyazo](https://i.gyazo.com/d5290efa9366e7b06fd5850bd0fa2776.png)](https://gyazo.com/d5290efa9366e7b06fd5850bd0fa2776)

## drop　列の削除

```py
df_score.drop('役職', axis=1, inplace=True)
# axis=1の指定によって、列を削除できる
# inplace=Trueの指定によって、df_scoreの値が置き換わる
```

[![Image from Gyazo](https://i.gyazo.com/2c39831d321ee13ab932821411599f5b.png)](https://gyazo.com/2c39831d321ee13ab932821411599f5b)

## query　条件でフィルタ

```py
df_score.query('部署 == ["営業", "人事"]', inplace=True)
# inplace=Trueの指定によって、df_scoreの値が置き換わる
```

[![Image from Gyazo](https://i.gyazo.com/0b1390de34f32de13ba5f6ec7769b2b0.png)](https://gyazo.com/0b1390de34f32de13ba5f6ec7769b2b0)

## sort_values　並び替え

```py
df_score.sort_values(['ID', 'スコア'], inplace=True)
# リストは並び替え優先度の高い順に並べる
# inplace=Trueの指定によって、df_scoreの値が置き換わる
# ascending=Falseを指定すると降順
```

[![Image from Gyazo](https://i.gyazo.com/ecc12812d00a5a565b4599e2ad7f0f8a.png)](https://gyazo.com/ecc12812d00a5a565b4599e2ad7f0f8a)

## drop_duplicates　重複削除

```py
df_score.drop_duplicates(subset=['ID'], keep='last', inplace=True)
# subset=['ID']の指定によって、重複判断する列を指定。複数設定可。複数の場合、すべて重複した場合に限り重複とみなす
# keep='last'の指定によって、最後のレコードを残す。最初のレコードを残す場合、keep='first'を指定
# inplace=Trueの指定によって、df_scoreの値が置き換わる
```

[![Image from Gyazo](https://i.gyazo.com/337ed29b7c93e12d3665efffc99e88ab.png)](https://gyazo.com/337ed29b7c93e12d3665efffc99e88ab)

## apply　新しい列の作成

```py
def full_name(df):
    return df['姓'] + df['名']
# 変換ロジックを定義

df_score['姓名'] = df_score.apply(full_name, axis=1)
# 定義した関数をapplyで適用する
# axis=1の指定によって、列を作成できる
```

[![Image from Gyazo](https://i.gyazo.com/6c178294a6451798841ba320b93a0063.png)](https://gyazo.com/6c178294a6451798841ba320b93a0063)

## transpose　行列入れ替え

```py
df_score.transpose()
```

[![Image from Gyazo](https://i.gyazo.com/7bb850db125c6aeee5000b5335651e84.png)](https://gyazo.com/7bb850db125c6aeee5000b5335651e84)

## merge　テーブル結合

### サンプルデータその2

```py
df_blood = pd.DataFrame({
    'ID': ['A001', 'A002', 'A003', 'A004', 'A005', 'A006', 'A007', 'A008', 'A009', 'A010', 'A011', 'A012'], 
    '氏名': ['山田弘樹', '高橋優斗', '野口美咲', '池田裕子', '北本雄太', '森田健司', '伊藤奈央', '花田武', '鈴木雄介', '佐藤瑞樹', '木下智子', '江口悟'], 
    '血液型': ['A', 'B', 'O', 'AB', 'A', 'O', 'B', 'A', 'A', 'B', 'O', 'O']
    })
```

[![Image from Gyazo](https://i.gyazo.com/7e14014938edcc9e8907c9075e58a1cc.png)](https://gyazo.com/7e14014938edcc9e8907c9075e58a1cc)

```py
pd.merge(df_score, df_blood, on='ID', how='left')
# on='ID'の指定によって、結合キーを指定。
# how='left'の指定によって、結合方式を指定。'left'は左外部、'inner'は内部、'outer'は完全外部。
```

[![Image from Gyazo](https://i.gyazo.com/b4a2f381badb6992fabca0d11aba6aa8.png)](https://gyazo.com/b4a2f381badb6992fabca0d11aba6aa8)

## 【最後に】データ分析手法のコンテンツ（私が制作したものの紹介）

私が制作したものですが、以下、初心者向けのPythonデータ分析学習コンテンツです。データの取り込み、前処理から可視化の流れを学習できる教材です。考察イメージまで記載されているのでオススメです。一部無料公開されているので、ご興味あればお試しください。

https://www.techpit.jp/courses/30