6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pandasなどでよく使うデータ前処理まとめ

Last updated at Posted at 2020-05-11

内容

Pandasなどで、自分がデータ前処理時によく使う処理まとめ
何回もググっていると疲れてくるので、記事でまとめた。
--随時追加中--

事前設定

pandasライブラリの呼び出し(import)

pip install pandasなどで入れておく。

import pandas as pd
import pandas_profiling

データファイルの読み込みと書き出し

CSV

df = pd.read_csv('data.csv')

Excel

df = pd.read_excel('data.xlsx')

書き出し(CSV)

df.to_csv(output.csv")

(jupyter notebookなどで)カラムを省略表示しない設定

下の場合だと、最大50カラムまで省略せずに表示する。

pd.set_option('display.max_columns', 50)

データ確認・処理系

カラム名の一斉取得

df.columns

カラム名の変更

dictionaryで関連づけを行なってから、rename

dic = {'氏名':'name','性別':'sex'}
df = df.rename(columns=dic)

one-hot-encoding

pd.get_dummies(df,columns=['Sex'])

データ型の確認

df.dtypes

データ型の変換

下の例だと、columnAのデータ型をint型に変換している。

df['columnA'] = df['columnA'].astype('int64')

ユニークな値の導出

下の例だと、nameカラムのユニークな値を全て出力する

df['name'].unique()

ユニークな値とその出現数のカウント

下の例だとnameカラムのユニークな値とその回数を出力する。
データ数が多いとカウントにそれなりに時間がかかるので、さっとユニーク値を確認するだけなら、上記のunique()の方が良い。

df["name"].value_counts()

複数列をカラム名を指定して取得

df = df[['ColumnA', 'ColumnB', 'ColumnC']]

カテゴリ変数を任意の数値化

df['categoryA'] = df['categoryA'].map({'a':3,'b':2,'c':1,'d':0})

統計量の算出

df.describe()

データ統合

縦方向にジョイン

カラムなどが一致しているデータ同士を縦方向にジョインする。

out = pd.concat([df1, df2])

横方向にジョイン

左、右、外部、内部結合などあるが、書き方は同じ、
左外部結合ならleft

out = pd.merge(df1,  df2, on='キーとなるカラム名', how='left')

集計(groupby)

集計したいカラム名でカウントしたい場合

groupby_ex = data.groupby('[target_column]').size()

複数のカラムで集計したい場合

groupby_ex_multi = data.groupby(['[target1]', '[target2]']).size()

欠損値系

欠損値の確認

これで、各カラムの欠損値が確認できる。

df.isnull().sum()

逆にきちんとデータが入っている数の確認はこちら

df.notnull().sum()

欠損値が少ないカラムのみ利用する場合

下の例だと欠損値の値が500以下のカラムは採用する。

df_new = pd.DataFrame()
for column in df.columns:
    if df[column].isnull().sum() <= 500:
        df_new[column] = df[column]

欠損値の処理

NaNの値は全て0埋め

df = df.fillna(0)

列ごとに異なる値で埋める

dictionaryで記載すると、複数の列のNaNをそれぞれ固有の値で埋めることができる。

df = df.fillna({'columnA':0, 'columnB':100})

とあるカラムがNaNの時に行ごと消す

下の例だとcolumnAの値がNaNの行ごと消す。

df = df.dropna(subset=['columnA'])

とある文字列などが含まれている行を消す

下の例だと、IDというカラムに'U'が含まれている場合にその行を消す。

df = df[~df['ID'].str.contains('U')]

正規表現

特定の文字列の間の文字列を抽出して列生成

def extract_test(x):
    return re.search('(?<=left_str).*(?=\right_str)', x).group()
df["new_column"] = df["org_column"].apply(extract_test)

可視化系(matplotlib)

日本語ライブラリのインストールと呼び出し

# %%bash
# pip install -q japanize-matplotlib

import japanize_matplotlib

可視化系(seaborn)

ライブラリのimport

import seaborn as sns

ヒートマップの表示(相関関係)

sns.heatmap(df.corr())
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?