Pythonのデータ分析ライブラリであるPandasは、多くのデータサイエンティストやエンジニアにとって欠かせないツールです。ここでは、Pandasを効果的に活用するためのチートシートを作成しましたので紹介します。体が覚えるまでブックマークして利用してみて下さい。
データの読み込みと表示
色々なファイルやデータソースからデータを読み込む
CSVファイルからデータを読み込む
import pandas as pd df = pd.read_csv('data.csv')
Microsoft Excelファイル(.xlsや.xlsx)を読み込み
df = pd.read_excel('data.xlsx')
JSON形式のファイルを読み込み
df = pd.read_json('data.json')
SQLクエリの結果をデータフレームとして読み込み(例: SQLite)
import sqlite3 conn = sqlite3.connect('database.db') query = "SELECT * FROM table_name" df = pd.read_sql(query, conn)
HTMLファイルからテーブル要素を抽出してデータフレームとして読み込み
dfs = pd.read_html('data.html') df = dfs[0] # 複数のテーブルがある場合は適切なテーブルを選択します
クリップボードからデータを読み込み
Excelなどの表形式のデータをコピーしておいて、Pythonコード内で読み込むことができます。
df = pd.read_clipboard()
読み込みの際の条件を指定する
sep/delimiter : 列を区切るための文字列や正規表現を指定
df = pd.read_csv('data.csv', sep='\t') # タブ区切りのファイルを読み込む
header : ヘッダーがあるかどうかを指定
df = pd.read_csv('data.csv', header=0) # ヘッダーがある場合 df = pd.read_csv('data.csv', header=None) # ヘッダーがない場合
names : 読み込む列名を指定
df = pd.read_csv('data.csv', names=['col1', 'col2', 'col3']) # 列名を指定して読み込む
index_col : 行のインデックスにする列を指定
df = pd.read_csv('data.csv', index_col='ID') # 'ID'列をインデックスにする
usecols : 読み込む列を指定
df = pd.read_csv('data.csv', usecols=['col1', 'col2']) # 'col1'と'col2'の列のみを読み込む
dtype : 列ごとのデータ型を指定
df = pd.read_csv('data.csv', dtype={'col1': int, 'col2': str}) # 'col1'をint型、'col2'をstr型として読み込む
parse_dates : 日付をパースする列のリストまたは辞書を指定
df = pd.read_csv('data.csv', parse_dates=['date_column']) # 'date_column'列の値を日付として読み込む
encoding : ファイルのエンコーディングを指定
df = pd.read_csv('data.csv', encoding='utf-8') # UTF-8でエンコードされたファイルを読み込む
skiprows/skipfooter : 読み込み時にスキップする行数を指定
df = pd.read_csv('data.csv', skiprows=3) # 最初の3行をスキップして読み込む df = pd.read_csv('data.csv', skipfooter=2) # 最後の2行をスキップして読み込む
na_values : 欠損値として扱う値を指定
df = pd.read_csv('data.csv', na_values=['NA', 'N/A', '-']) # 'NA', 'N/A', '-'を欠損値として扱う
データの表示
基本的なデータの表示方法
import pandas as pd # CSVファイルからデータを読み込む df = pd.read_csv('data.csv') # 最初の5行を表示 print(df.head()) # 最初の10行を表示 print(df.head(10)) # 末尾の10行を表示 print(df.tail(10)) # ランダムに5行を表示 print(df.sample(n=5)) # 特定の列を表示 print(df['column_name']) # 条件に合致する行を表示 print(df[df['column_name'] > value])
属性(アトリビュート)を利用した表示方法
iloc
とloc
は、Pandasのデータフレームやシリーズからデータを選択するための属性(attribute)です。これらを使用することで、行や列をインデックスやラベルを使って選択することができます。
iloc
: 行と列のインデックスを使用してデータにアクセスloc
: 行と列のラベルを使用してデータにアクセス
print(df.iloc[0:5, 0:3]) # 0から4行目、0から2列目のデータを表示 print(df.loc[:, ['column1', 'column2']]) # 'column1'と'column2'の列のデータを表示
pandasデータ処理ドリル Pythonによるデータサイエンスの腕試し [ 株式会社ビープラウド ]
データの基本統計量の確認
データの統計量の概要を確認する
info()
とdescribe()
は、Pandasのデータフレームやシリーズに対して使用できる基本的な統計情報を提供するメソッドです。
info()
info()
メソッドは、データフレームやシリーズの基本的な情報を要約して表示します。
- データ型(dtype): 各列のデータ型を表示します。
- 非欠損値の数(Non-Null Count): 各列において欠損値ではない要素の数を表示します。
- 列の名前: データフレームの各列の名前を表示します。
- 行数: データフレームの行数を表示します。
info()
メソッドは、各列に含まれるデータの型や欠損値の有無、データの行数など、データセット全体の概要を素早く把握するのに役立ちます。
describe()
describe()
メソッドは、データの要約統計量を提供します。
- count: 非欠損値の数を表示します。
- mean: 平均値を表示します。
- std: 標準偏差を表示します。
- min: 最小値を表示します。
- 25%、50%、75%: データの四分位数を表示します。25%は第一四分位数(Q1)、50%は中央値(第二四分位数、中央値)、75%は第三四分位数(Q3)です。
- max: 最大値を表示します。
describe()
メソッドは、データの分布や範囲に関する情報を提供します。これにより、データの特徴を把握し、データセット全体の傾向や異常値を素早く確認することができます。
# データの概要を表示 print(df.info()) # 数値列の統計量を表示 print(df.describe())
特定の統計量を表示
mean() : 列の平均値を計算
df.mean()
median() : 列の中央値を計算
df.median()
std() : 列の標準偏差を計算
df.std()
var() : 列の分散を計算
df.var()
sum() : 列の合計を計算
df.sum()
count() : 各列の非欠損値の数を計算
df.count()
min() : 列の最小値を計算
df.min()
max() : 列の最大値を計算
df.max()
quantile() : 列のパーセンタイルを計算 / q
パラメータにパーセンタイルを指定(0〜1の範囲)
df.quantile(q=0.25) # 25パーセンタイル
corr() : 列間の相関係数を計算
df.corr()
cov() : 列間の共分散を計算
df.cov()
データの選択とフィルタリング
特定の列の選択
# 特定の列の選択 selected_columns = ['column1', 'column2'] print(df[selected_columns])
ブールインデックスング
ブールインデックスングを使用して、条件に合致する行を選択します。
# 条件に合致する行を選択 selected_rows = df[df['column'] > value]
query()メソッド
query()
メソッドを使用して、SQLライクな構文を使用してデータをフィルタリングできます。
# 条件に合致する行を選択 selected_rows = df.query('column > @value')
locおよびilocアクセサ
loc
およびiloc
アクセサを使用して、ラベルまたは位置を使用して行や列を選択します。
# ラベルを使用して行と列を選択 selected_data = df.loc[row_labels, column_labels] # 位置を使用して行と列を選択 selected_data = df.iloc[row_indices, column_indices]
atおよびiatアクセサ
at
およびiat
アクセサを使用して、ラベルまたは位置を使用して単一の要素を選択します。
# ラベルを使用して単一の要素を選択 value = df.at[row_label, column_label] # 位置を使用して単一の要素を選択 value = df.iat[row_index, column_index]
データのソートとグルーピング
データソート
sort_values()
メソッドを使用して、特定の列または複数の列に基づいてデータをソートします。デフォルトでは昇順にソートされますが、ascending=False
を指定することで降順にソートすることもできます。
# 特定の列に基づいてデータを昇順にソート sorted_data = df.sort_values(by='column_name') # 複数の列に基づいてデータを昇順にソート sorted_data = df.sort_values(by=['column1', 'column2']) # 降順にソート sorted_data = df.sort_values(by='column_name', ascending=False)
インデックスソート
sort_index()
メソッドを使用して、行や列のインデックスに基づいてデータをソートします。デフォルトでは昇順にソートされますが、ascending=False
を指定することで降順にソートすることもできます。
# 行のインデックスに基づいてデータを昇順にソート sorted_data = df.sort_index() # 列のインデックスに基づいてデータを昇順にソート sorted_data = df.sort_index(axis=1) # 降順にソート sorted_data = df.sort_index(ascending=False)
グループ化
groupby()
メソッドを使用して、特定の列の値に基づいてデータをグループ化します。その後、グループごとに集計や操作を行うことができます。
# 特定の列の値に基づいてデータをグループ化し、集計する grouped_data = df.groupby('column_name').mean() # 複数の列の値に基づいてデータをグループ化し、集計する grouped_data = df.groupby(['column1', 'column2']).sum()
欠損値の処理
欠損値を指定した値で置き換え
fillna()
メソッドを使用して、欠損値を指定した値で置き換えることができます。
# 欠損値を特定の値で置き換える df.fillna(value, inplace=True)
欠損値を含む行や列を削除
dropna()
メソッドを使用して、欠損値を含む行や列を削除することができます。
# 欠損値を含む行を削除する df.dropna(inplace=True) # 欠損値を含む列を削除する df.dropna(axis=1, inplace=True)
欠損値を近くの値を使用して補間
interpolate()
メソッドを使用して、欠損値を近くの値を使用して補間することができます。
# 欠損値を補間する df.interpolate(inplace=True)
前方または後方の値で補完
ffill()
メソッド(forward fill)とbfill()
メソッド(backward fill)を使用して、欠損値をそれぞれ前方または後方の値で補完することができます。
# 前方の値で欠損値を補完する df.ffill(inplace=True) # 後方の値で欠損値を補完する df.bfill(inplace=True)
データの結合
シンプルな列の結合
# 列の結合 df['new_column'] = df['column1'] + df['column2']
複数のデータフレームを結合
merge()
メソッドを使用して、複数のデータフレームを結合します。
# 共通の列を基準にデータフレームを結合する merged_df = pd.merge(df1, df2, on='common_column') # 列名が異なる場合には、left_onおよびright_onパラメータを使用して指定します merged_df = pd.merge(df1, df2, left_on='column1', right_on='column2') # インデックスを基準に結合する場合 merged_df = pd.merge(df1, df2, left_index=True, right_index=True)
データフレームを縦または横に連結
concat()
関数を使用して、データフレームを縦または横に連結することができます。axis
パラメータを使用して、連結の方向を指定します。
# 縦方向に連結する concatenated_df = pd.concat([df1, df2], axis=0) # 横方向に連結する concatenated_df = pd.concat([df1, df2], axis=1)
インデックスに基づいて結合
join()
メソッドを使用して、インデックスに基づいてデータフレームを結合することができます。
# インデックスを基準にデータフレームを結合する joined_df = df1.join(df2, how='inner')
別のデータフレームを行として追加
append()
メソッドを使用して、データフレームに別のデータフレームを行として追加することができます。
# df2をdf1の末尾に行として追加する
appended_df = df1.append(df2)
時系列データの結合
merge_asof()
メソッドを使用して、時系列データの結合を行うことができます。このメソッドは、2つのデータフレームを時系列に基づいて結合し、最も近い時刻に合わせて結合します。
# 時系列データを基準に結合する merged_df = pd.merge_asof(df1, df2, on='time_column')
以上がPandasのチートシートです。定期的にメンテナンスしたいと思いますので、他によく使う手法がありましたら是非教えて下さい。