データ分析で使えるPython Pandasのチートシート

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])

属性(アトリビュート)を利用した表示方法

iloclocは、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のチートシートです。定期的にメンテナンスしたいと思いますので、他によく使う手法がありましたら是非教えて下さい。

[PR] Python学習・データ分析のオンラインコースを紹介します

click.linksynergy.com

click.linksynergy.com

click.linksynergy.com