ど~も!データサイエンティストのえいせいです。
pythonのコードを書いていてよく、「あれっ、あの関数どうやって書くんだっけ?」という事がありますよね?
綴りなど細かい点を全て覚えるのは至難の業ですし、むしろわざわざ覚える手間がもったいないです。
そんな時はチートシートを活用しましょう。
今回はデータ分析で使うpandasの関数のチートシートを作成しました。
ぜひ活用してください。
pandasでデータの読み込み

以下がpandasの「データの読み込み」に関するチートシートです。
テキストファイルの読み込み
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import pandas as pd # ファイルを読み込む df = pd.read_csv('ファイル名.csv') # 先頭n行を表示する df.head(n) # 列名を指定する df = pd.read_csv('ファイル名.csv', names=['列1', '列2', '列3']) # インデックス列を指定する df = pd.read_csv('ファイル名.csv', index_col='列1') # 文字コードを指定する df = pd.read_csv('ファイル名.csv', encoding='shift-jis') |
Excelファイルの読み込み
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd # シート名を指定する df = pd.read_excel('ファイル名.xlsx', sheet_name='シート名') # インデックス列を指定する df = pd.read_excel('ファイル名.xlsx', sheet_name='シート名', index_col='列1') # 特定のセルを指定する df = pd.read_excel('ファイル名.xlsx', sheet_name='シート名', usecols='A:D', skiprows=[0,1], skipfooter=2) |
JSONファイルの読み込み
1 2 3 4 5 6 7 |
import pandas as pd # ファイルを読み込む df = pd.read_json('ファイル名.json') # ネストされたJSONをフラットにする df = pd.json_normalize(data) |
pandasでデータの選択
以下がpandasの「データの選択」に関するチートシートです。
基本的な選択方法
1 2 3 4 5 6 7 8 9 |
# カラムの選択 df['column_name'] # 特定のカラムを選択 df[['column_1', 'column_2']] # 複数のカラムを選択 # 行の選択 df.loc[0] # ラベルに基づく選択 df.iloc[0] # インデックスに基づく選択 df.loc[start:end] # スライスによる選択 df[df['column'] > value] # 条件式に基づく選択 |
複数条件での選択方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 複数条件の選択 df[(df['column_1'] > value_1) & (df['column_2'] < value_2)] # 要素の選択 df.loc[0, 'column_name'] # ラベルに基づく要素の選択 df.iloc[0, 1] # インデックスに基づく要素の選択 # 要素の更新 df.loc[0, 'column_name'] = value # 条件に基づく要素の更新 df.loc[df['column'] > value, 'column_name'] = new_value # データのフィルタリング df[df['column'].str.contains('text')] # 文字列に基づくフィルタリング df[df['column'].isin(['value_1', 'value_2'])] # リストに基づくフィルタリング |
pandasでデータの操作
以下がpandasの「データの操作」に関するチートシートです。
条件による行の選択と並び替え
1 2 3 4 5 6 |
# 条件による行の選択 df[df['column_name'] == 'value'] # 特定の値をもつ行 df[(df['column_1'] > 10) & (df['column_2'] == 'value')] # 複数の条件を満たす行 # データの並び替え df.sort_values(by='column_name', ascending=False) # 列の値で昇順または降順にソート |
データの並び替えとフィルタリング
1 2 3 4 5 6 7 |
# データの並び替え df.sort_values(by='column_name', ascending=False) # 列の値で昇順または降順にソート # データのフィルタリング df[df['column_name'].str.contains('keyword')] # 文字列を含む行 df[df['column_name'].isin(['value_1', 'value_2'])] # 特定の値をもつ行 df[df['column_name'].between(10, 20)] # 指定した範囲にある行 |
新しい列・行の作成と削除
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 新しい列の作成 df['new_column'] = df['column_1'] + df['column_2'] # 列の和 df['new_column'] = df['column_name'].apply(lambda x: x.lower()) # 列の文字列を小文字に変換 # 列の値の変更 df.loc[df['column_name'] == 'value', 'column_name'] = 'new_value' # 特定の値を新しい値に置き換える df['column_name'] = df['column_name'].replace({'old_value': 'new_value'}) # 古い値を新しい値に置き換える # 列の削除 df = df.drop(columns=['column_name']) # 1つまたは複数の列 # 行の削除 df = df.drop(index=[1, 2, 3]) # 1つまたは複数の行 |
欠損値の処理
1 2 3 |
# 欠損値の処理 df.dropna() # 欠損値を含む行を削除 df.fillna(value=0) # 欠損値を0で埋める |
pandasでデータの結合
以下がpandasの「データの結合」に関するチートシートです。
concat()
2つ以上のデータフレームを結合する。オプションとして、複数のデータフレームを同時に結合することもできる。
1 2 3 4 5 |
# 行方向にデータを結合 pd.concat([df1, df2], axis=0) # 列方向にデータを結合 pd.concat([df1, df2], axis=1) |
merge()
結合キーを指定してデータフレームを結合。共通の列またはインデックスを使用して、複数のデータフレームを結合することができる。
1 2 3 4 5 6 7 8 9 10 11 |
# 列"key"をキーにして結合 pd.merge(df1, df2, on='key') # キーが異なる場合、別々のキーで結合可能 pd.merge(df1, df2, left_on='key1', right_on='key2') # 内部結合。両方のデータフレームに共通するキーのみを残して結合します。 pd.merge(df1, df2, left_on='key1', right_on='key2', how='inner') # 外部結合。どちらか一方にだけあるキーも含めて結合します。 pd.merge(df1, df2, left_on='key1', right_on='key2', how='outer') |
merge_ordered
2つのデータフレームを並べ替えながら結合する。
両方のデータフレームが時間的または序列的な情報を持っている場合に便利。
1 2 |
# 時系列の情報を持つ2つのデータフレームを結合 df.merge_ordered(df1, on='date') |
pandasでグループ化
以下がpandasの「グループ化」に関するチートシートです。
まずはサンプルのデータフレームを作成します。
1 2 3 4 |
# DataFrameの作成 df = pd.DataFrame({'名前': ['A', 'B', 'C', 'A', 'B', 'C'], '科目': ['国語', '国語', '国語', '数学', '数学', '数学'], '点数': [80, 70, 75, 90, 85, 80]}) |
単一カラムでのグループ化
1 2 3 4 5 |
# カラム名でグループ化 df.groupby('名前') # グループごとの平均点 df.groupby('名前')['点数'].mean() |
複数カラムでのグループ化
1 2 3 4 5 |
# 複数のカラムでグループ化 df.groupby(['名前', '科目']) # グループごとの平均点 df.groupby(['名前', '科目'])['点数'].mean() |
グループによるフィルタリング
1 2 |
# 点数の平均が80点以上のグループを抽出 df.groupby('名前').filter(lambda x: x['点数'].mean() >= 80) |
グループによるソート
1 2 |
# グループ内の点数の降順でソート df.groupby('名前').apply(lambda x: x.sort_values('点数', ascending=False)) |
グループによる変換
1 2 3 |
# グループごとに点数を平均化 df['平均点'] = df.groupby('名前')['点数'].transform('mean') df |
pandasでデータの集計と統計量の計算
以下がpandasの「データの集計と統計量の計算」に関するチートシートです。
まずはサンプルのデータフレームを作成します。
1 2 3 4 5 6 7 8 9 |
# データの準備 import pandas as pd import numpy as np df = pd.DataFrame({ 'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'], 'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'], 'C': np.random.randn(8), 'D': np.random.randn(8) }) |
データを集計し統計量を求める
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# データの集計 df.groupby('A').sum() # A列でグループ化し、その他の列の合計を計算 df.groupby(['A', 'B']).mean() # A列とB列でグループ化し、その他の列の平均値を計算 # 複数の集計関数を適用 df.groupby('A').agg([np.sum, np.mean, np.std]) # A列でグループ化し、その他の列に複数の集計関数を適用 # 複数列に対して異なる集計関数を適用 df.groupby('A').agg({'C': np.sum, 'D': lambda x: np.std(x, ddof=1)}) # 統計量の計算 df.mean() # 列ごとの平均値を計算 df.std() # 列ごとの標準偏差を計算 df.describe() # 列ごとの統計量を計算 df.corr() # 列間の相関係数を計算 |
pandasでデータの保存とエクスポート
以下がpandasの「データの保存とエクスポート」に関するチートシートです。
基礎:データの保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# CSVファイルに書き出し df.to_csv('file.csv', index=False) # Excelファイルに書き出し df.to_excel('file.xlsx', index=False) # JSONファイルに書き出し df.to_json('file.json', orient='records') # HDF5ファイルに書き出し df.to_hdf('file.h5', key='data', mode='w') # Pickleファイルに書き出し df.to_pickle('file.pkl') |
応用編:データの保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# indexを削除 df.to_csv('tips_sample.csv', index=False) # タブ区切りのCSVファイルを出力 df.to_csv('tips_sample.tsv', sep='\t', index=False) # パイプ区切りのCSVファイルを出力 df.to_csv('tips_sample.pipe', sep='|', index=False) # エンコーディングをutf-8に指定 df.to_csv('tips_sample.csv', encoding='utf-8', index=False) # 日付の表示形式を指定して書き出し df.to_csv('sample.csv', date_format='%Y/%m/%d %H:%M:%S', index=False) |
以上がチートシート一覧になります。
pandasの操作に関して詳しく知りたい人は、全9回の無料講座で詳しく解説してますので、ご利用ください。
【python】データ分析のためのpandasの使い方①:データフレームの作成
書き方のお作法はPEP8が参考になります。