Pandas頻出メソッド一覧・超まとめ【Python】

2024年9月30日データ操作

スポンサーリンク

皆さんご存知の通り、PandasはPythonのデータ解析ライブラリです。
特にデータフレームを扱う際に非常に強力で、Pythonを学ぶ上で欠かせない存在となっています。

以下、Pandasを利用する上で重要なメソッドをまとめました。

目次

Pandasのインストール

Pandasを利用するためには、まずインストールが必要です。

pip install panda

Pandasの基本データ構造

Series

  • 一次元のラベル付き配列。
  • 異なるデータ型を持つことができます。
import pandas as pd

# Seriesの作成
s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(s)

DataFrame

  • 二次元のラベル付きデータ構造。
  • 異なる型のデータを持つ列を持つことができます。
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': ['a', 'b', 'c']
}
df = pd.DataFrame(data)
print(df)

データの入出力

データの読み込み

CSVファイルの読み込み

df = pd.read_csv('data.csv')

Excelファイルの読み込み

df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

SQLite3データベースからの読み込み

import sqlite3

conn = sqlite3.connect('database.db')
df = pd.read_sql_query('SELECT * FROM table_name', conn)
conn.close()

※実務的にはwith文を使うことが多い気がしますが、上記例では最も基本的な書き方を載せました。

JSONファイルの読み込み

df = pd.read_json('data.json')

データの書き込み

CSVファイルに書き込み

df.to_csv('output.csv', index=False)

Excelファイルに書き込み

df.to_excel('output.xlsx', index=False)

SQLite3データベースに書き込み

import sqlite3

conn = sqlite3.connect('database.db')
df.to_sql('table_name', conn, if_exists='append', index=None)
conn.close()

JSONファイルに書き込み

df.to_json('output.json')

データの基本操作

データの確認

先頭の5行を表示

print(df.head())

末尾の5行を表示

print(df.tail())

データの情報を表示

print(df.info())

基本統計量の表示

print(df.describe())

データの選択とフィルタリング

特定の列を選択

column_data = df['column_name']

複数の列を選択

subset = df[['column1', 'column2']]

条件に基づくフィルタリング

filtered_data = df[df['column_name'] > value]

行インデックスを指定して選択

row_data = df.iloc[0]  # 0行目を選択

データの追加と削除

※行の追加は便宜上省いています。

新しい列の追加

df['new_column'] = df['existing_column'] * 2

行の削除

df = df.drop(index=[0, 1])  # 行インデックス0と1を削除

列の削除

df = df.drop(columns=['column_name'])

データのソート

行のソート

df_sorted = df.sort_values(by='column_name', ascending=True)

ascending=Trueで昇順、ascending=Falseで降順。
デフォルトは昇順です。

インデックスの設定

インデックスの変更

# 直接変更を加える
df.set_index('column_name', inplace=True)

# 変更が加えられたDataFrameを使う
df = df.set_index('column_name', inplace=False)

※上記例はいずれも同じ結果になります。

inplace=Trueとすると、DataFrameに直接変更が加えられます。(returnなし)
inplace=Falseとすると、DataFrameに直接変更は加えられず、変更が加えられたDataFrameが返されます。

インデックスのリセット

df.reset_index(drop=True, inplace=True)

データの集約とグループ化

グループ化

グループ化と集計

grouped = df.groupby('column_name').sum()

複数の集計関数の適用

agg_data = df.groupby('column_name').agg({'column1': 'sum', 'column2': 'mean'})

ピボットテーブルの作成

pivot_table = df.pivot_table(values='value_column', index='index_column', columns='column_name', aggfunc='mean')

データの結合とマージ

データフレームのマージ

merged_df = pd.merge(df1, df2, on='key_column', how='inner')

データフレームの連結

concatenated_df = pd.concat([df1, df2], axis=0)  # 縦に連結

axis=1で横に連結します。

外部結合や内部結合

merged_outer = pd.merge(df1, df2, how='outer', on='key_column')  # 外部結合
merged_inner = pd.merge(df1, df2, how='inner', on='key_column')  # 内部結合

データの前処理

欠損値の処理

欠損値の確認

print(df.isnull().sum())

欠損値の削除

df = df.dropna()

欠損値の補完

df['column_name'].fillna(value, inplace=True)

データ型の変換

データ型の確認

print(df.dtypes)

データ型の変更

df['column_name'] = df['column_name'].astype('int')

重複データの処理

重複行の削除

df = df.drop_duplicates()

カテゴリカルデータの処理

df['category_column'] = df['category_column'].astype('category')

データの可視化

PandasはMatplotlibと統合されており、簡単にデータの可視化ができます。

基本的なプロット

import matplotlib.pyplot as plt

df['column_name'].plot(kind='hist', bins=20)
plt.title('Histogram of Column Name')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

複数のプロット

df.plot(x='x_column', y='y_column', kind='scatter')
plt.title('Scatter Plot')
plt.xlabel('X Column')
plt.ylabel('Y Column')
plt.show()

グラフのカスタマイズ

plt.figure(figsize=(10, 6))
df['column_name'].plot(kind='line')
plt.title('Line Plot')
plt.xlabel('Index')
plt.ylabel('Value')
plt.grid()
plt.show()

時系列データの処理

日付のパース

df['date_column'] = pd.to_datetime(df['date_column'])

リサンプリング

df.set_index('date_column', inplace=True)
monthly_mean = df.resample('M').mean()  # 月単位での平均

移動平均の計算

df['moving_average'] = df['value_column'].rolling(window=3).mean()

カスタム関数の適用

applyメソッドの使用

df['new_column'] = df['existing_column'].apply(lambda x: x * 2)

mapメソッドの使用

df['new_column'] = df['existing_column'].map(some_function)

高度な機能

スタイルの適用

styled_df = df.style.highlight_max(axis=0)  # 最大値をハイライト
styled_df

データの変換

スタックとアンスタック

stacked = df.stack()  # 行を列に変換
unstacked = stacked.unstack()  # 列を行に戻す

メルト(long formatへの変換)

melted_df = df.melt(id_vars=['id_column'], value_vars=['column1', 'column2'])

各種関数の適用

カスタム関数を使用した列の処理

def custom_function(x):
    return x + 10

df['new_column'] = df['existing_column'].apply(custom_function)

データのフィルタリングと条件付き操作

条件付き選択

複数条件でのフィルタリング

filtered_data = df[(df['column1'] > 5) & (df['column2'] == 'some_value')]

条件に基づく新しい列の追加

df['new_column'] = df['column_name'].apply(lambda x: 'High' if x > 10 else 'Low')

データのエクスポート

Excelファイルへのエクスポート

複数のシートにデータを書き込む

with pd.ExcelWriter('output.xlsx') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    df_summary.to_excel(writer, sheet_name='Summary', index=False)

Pickle形式での保存

データフレームをPickleファイルに保存

df.to_pickle('data.pkl')

Feather形式での保存

Feather形式での保存(高速なバイナリ形式)

df.to_feather('data.feather')

高度なデータ分析

時系列解析

季節性の分解

from statsmodels.tsa.seasonal import seasonal_decompose

result = seasonal_decompose(df['value_column'], model='additive')
result.plot()
plt.show()

クラスタリング

K-meansクラスタリングの実施

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3)
df['cluster'] = kmeans.fit_predict(df[['feature1', 'feature2']])

回帰分析

線形回帰モデルの適用

from sklearn.linear_model import LinearRegression

X = df[['feature1', 'feature2']]
y = df['target']
model = LinearRegression()
model.fit(X, y)
predictions = model.predict(X)

データのスタイリング

DataFrameのスタイル設定

条件付き書式の設定

styled_df = df.style.applymap(lambda x: 'background-color: yellow' if x > 10 else '')
styled_df

テーブルの表示形式のカスタマイズ

styled_df.set_table_attributes('style="font-size: 12px;"')

効率的なデータ処理

大規模データの処理

Daskを使用した大規模データの処理

import dask.dataframe as dd

dask_df = dd.read_csv('large_data.csv')
result = dask_df.groupby('column_name').sum().compute()

パフォーマンスの最適化

データ型の最適化

df['int_column'] = df['int_column'].astype('int32')  # メモリ使用量を削減

以上です。
追加や訂正があれば適宜更新にて対応いたします。