内容
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())