データハンドリング 前処理

データフレームの操作一覧

投稿日:8月 2, 2019 更新日:

データフレームでよく使う機能をチートシートとしてまとめました。

インデックス操作

用途概要サンプル
リセットインデックスまたはそのレベルのリセットdf.reset_index(drop=True, inplace=True)
設定既存の列を使用してインデックスを設定df.set_index(‘columns’)
表示インデックスの表示index

型変換

用途概要サンプル
dictDataFrameを辞書に変換df.to_dict()
numpyDataFrameをNumPy配列に変換to_numpy()
timestamp期間の開始時に、タイムスタンプのDatetimeIndexにキャストto_timestamp()
xarraypandasからxarrayオブジェクトに変換to_xarray()
numpyDataFrameをNumpyに変換df.values
任意任意のdtypeにキャストdf.astype({‘x1’: int, ‘x2’: str})

欠損値

用途概要サンプル
削除欠損値を削除df.dropna(subset=[‘x1’], inplace=True)
検出欠損値を検出df.isnull()
補完指定された方法でNA / NaN値を補完df.fillna(‘missing’)# 文字列で埋める
df.fillna(0)# 0で埋める
df_method.fillna(method=’ffill’, limit=2) #limitの数だけ直前の値で埋める
df_method.fillna(method=’bfill’) # 直後の値で埋める
df.fillna(df.mean()) # 平均値で埋める
補完さまざまな方法に従って値を補間df.interpolate()# 線形補間
df.interpolate(‘spline’, order=2) # スプライン補完 orderは次数
検出非欠損値を検出df.notna()

ソート

用途概要サンプル
インデックスインデックスで並べ替えるdf.sort_values([‘age’, ‘state’], ascending=True)
変数変数値で並び替えるsort_values(by[‘col1’, ‘col2’], ascending=[True, False])

一括処理

用途概要サンプル
指定された軸に対して関数を適用f_oddeven = lambda x: ‘odd’ if x % 2 == 1 else ‘even’
df.apply(f_oddeven, axis=1)
ウィンドウ関数ローリングウィンドウ単位で関数を適用rolling(window[, min_periods, center, …])

可視化

用途概要サンプル
箱ひげ図DataFrame列からグラフを作成df.plot(y=[‘x1’, ‘x2’, ‘x3′], alpha=0.6, figsize=(12,3), kind=’box’)
ヒストグラムDataFrameのヒストグラムを作成df.plot( y=[‘x1’, ‘x2’, ‘x3′], bins=50, alpha=0.5, figsize=(16,4), kind=’hist’)
散布図DataFrameの散布図を作成df.plot(x=’xdata’, y=’ydata’, kind=’scatter’)
棒グラフDataFrameの棒グラフを作成df.plot(y=[‘x1’, ‘x2’, ‘x3′], alpha=0.6, figsize=(12,3), kind=’bar’)
積み上げDataFrameの積み上げグラフを作成df.plot(y=[‘x1’, ‘x2’, ‘x3′], alpha=0.6, figsize=(12,3), stacked=True, kind=’bar’)
時系列DataFrameの折れ線グラフを作成df.plot(y=[‘x1’, ‘x2’, ‘x3’], figsize=(16,4), alpha=0.5)
六角形型の散布図DataFrameの六角型散布図を作成df.plot(x=’ad’, y=’ba’,kind=’hexbin’, gridsize=20)
確率密度分布DataFrameの確率密度分布を作成df.plot(y=[‘x1’, ‘x2’, ‘x3′], bins=50, alpha=0.5, figsize=(16,4), kind=’kde’)
円グラフDataFrameの円グラフを作成df.plot(y = ‘x1′, kind=’pie’)

結合

用途概要サンプル
結合indexをキーとしたデータフレームの結合df1.join(df2, how=’outer’)
結合別のDataFrameの列を結合pd.merge(left, right, on=[‘key1’, ‘key2′], how=’left’)
結合別のDataFrameの列を結合pd.concat([df1, df2, df3])#縦に結合(UNION)
pd.concat([df1, df4], axis=1, keys=[‘X’, ‘Y’])#横方向の結合(join)

集約

用途概要サンプル
集約列でDataFrameまたはSeriesをグループ化df.groupby([‘city’, ‘food’], as_index=False).mean() #as_index:’city’,’food’をindexにしない
df.groupby(‘city’).agg({‘price’: my_mean, ‘quantity’: np.sum}) #カラム別集計
横持ち変換DataFrameを横持ちから縦持ちに変換pd.melt(iris, id_vars=[‘Species’], var_name=’variable’, value_name=’value’)
横持ち横持ちに変換df.unstack()
ピボットピボットにより横持ち化pd.pivot_table(df, index=[‘Sex’, ‘Pclass’], columns=’Survived’, values=[‘Age’, ‘Fare’]))

重複

用途概要サンプル
要素カウントユニークな要素数をカウントdf.nunique(dropna=False, axis=’columns’) #daropna:naを含むか否か
重複削除重複を削除df.drop_duplicates(subset=’state’, keep=’last’, inplace=True)
# keep:first(最初の値を残す),last(最後の値を残す),False(重複全削除)

条件抽出

用途概要サンプル
条件抽出条件式を使用してDataFrameの列を出力df.query(’24 <= age < 50′)
カラムデータ型列のdtypeに基づいて該当列抽出df.select_dtypes(include=int)

出力

用途概要サンプル
ランク軸に沿って数値データのランク(1からn)df.rank(ascending=False)
行/列のシフト必要な期間数だけインデックスをシフトdf.shift(axis=1)
分位点指定された分位点で軸上の値を返します。df.quantile([0, 0.25, 0.5, 0.75, 1.0])#各分位点

その他

用途概要サンプル
csvcsv出力df.to_csv(‘data/dst/to_csv_out_header_index.csv’, header=False, index=False)
excelエクセル出力df.to_excel(‘name.xlsx’, sheet_name=’new_sheet_name’)
jsonJSON文字列に変換df.to_json()
df.to_json(path)#ファイル保存
picklepickle化(直列化)df.to_pickle(‘name.pkl’)#pickleを保存
pd.read_pickle(‘name.pkl’)#pickleの読み込み

-データハンドリング, 前処理

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

毒キノコの判定 〜SVM〜

Contents1 SVMとは2 標準化3 カーネルとは4 コストペナルティCとは5 ハイパーパラメータの調整6 学習およびテスト SVMとは クラス間のマージンを最大化するように境界線を引く手法。ク …

no image

不均衡データの取り扱い | PortoSeguro コンペ

Contents1 概要説明2 コンペの説明3 インデックス4 不均衡データセット5 メトリックの罠6 Resampling7 Random under-sampling8 Random over-s …

no image

python/pandas/DataFrame/欠損値の補完

データフレームの欠損値を補填する Contents1 メソッド2 データの準備3 pandas.DataFrame.fillna3.1 デフォルト3.2 パラメータ(method)3.3 使用例4 p …

no image

python/pandas/DataFrame/欠損値確認

データフレーム内の値がNoneまたはNAかどうかを確認する。 ※isnullとisnaの機能は同じ。isnullはisnaの別名なのでisnaが推奨 Contents1 メソッド2 データの準備3 p …

no image

探索的データ分析 | PortoSeguro コンペ

Contents1 概要説明2 コンペの説明3 パッケージの読み込み4 データについて5 メタデータ6 記述統計6.1 間隔変数6.1.1 reg変数6.1.2 car変数6.2 calc変数6.3 …