Pandasの高度な使い方
Pandasの高度な使い方として、以下のようなテクニックがあります。
これらはデータの前処理、分析、可視化に役立つ機能です。
1. 高度なデータフィルタリング
条件付きのフィルタリングや複数条件のフィルタリングを行うことができます。
1 2 3 4 5 6 7 8 9
| import pandas as pd
data = {'A': [10, 20, 30, 40], 'B': [100, 200, 300, 400]} df = pd.DataFrame(data)
df_filtered = df[(df['A'] >= 20) & (df['B'] <= 300)] print(df_filtered)
|
[実行結果]
A B
1 20 200
2 30 300
2. `apply`と`lambda`を使ったデータ変換
Pandasのapply
関数とlambda
を使ってカスタム関数を適用できます。
1 2 3 4 5 6 7 8 9 10 11 12 13
| import numpy as np
def custom_function(x): return x ** 2
df['A_squared'] = df['A'].apply(custom_function)
df['B_log'] = df['B'].apply(lambda x: x if x == 0 else np.log(x))
print(df)
|
[実行結果]
A B A_squared B_log
0 10 100 100 4.605170
1 20 200 400 5.298317
2 30 300 900 5.703782
3 40 400 1600 5.991465
3. 時系列データの操作
Pandasは時系列データの操作に強力な機能を提供します。
1 2 3 4 5 6 7 8 9 10 11 12
| date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D') df_time = pd.DataFrame(date_rng, columns=['date']) df_time['data'] = np.random.randint(0, 100, size=(len(date_rng)))
df_time.set_index('date', inplace=True)
df_monthly_mean = df_time.resample('M').mean()
print(df_monthly_mean)
|
[実行結果]
data
date
2023-01-31 39.7
4. `groupby`と`transform`によるデータの変換
groupby
とtransform
を組み合わせて、グループごとに変換を行います。
1 2 3 4 5 6 7 8
| data = {'A': ['foo', 'bar', 'foo', 'bar'], 'B': [1, 2, 3, 4], 'C': [10, 20, 30, 40]} df = pd.DataFrame(data)
df['B_normalized'] = df.groupby('A')['B'].transform(lambda x: (x - x.mean()) / x.std())
print(df)
|
[実行結果]
A B C B_normalized
0 foo 1 10 -0.707107
1 bar 2 20 -0.707107
2 foo 3 30 0.707107
3 bar 4 40 0.707107
5. `merge`の高度な使い方
複数のキーを使った結合や、結合方法の指定(内部結合、外部結合など)を行います。
1 2 3 4 5 6 7 8
| df1 = pd.DataFrame({'key1': ['A', 'B', 'C'], 'key2': [1, 2, 3], 'value': [10, 20, 30]}) df2 = pd.DataFrame({'key1': ['A', 'B', 'D'], 'key2': [1, 2, 4], 'value': [100, 200, 400]})
df_merged = pd.merge(df1, df2, on=['key1', 'key2'], how='inner', suffixes=('_left', '_right'))
print(df_merged)
|
[実行結果]
key1 key2 value_left value_right
0 A 1 10 100
1 B 2 20 200
6. マルチインデックス
マルチインデックスを使って階層的なデータを操作します。
1 2 3 4 5 6 7
| arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]] index = pd.MultiIndex.from_arrays(arrays, names=('letter', 'number')) df_multi = pd.DataFrame({'value': [10, 20, 30, 40]}, index=index)
print(df_multi.xs('A', level='letter'))
|
[実行結果]
value
number
1 10
2 20
7. パイプラインを使ったデータ操作の連鎖
パイプラインを使って複数の操作を連鎖させます。
1 2 3 4 5 6 7 8 9 10
| df = pd.DataFrame({'A': [1, 2, 3], 'B': [10, 20, 30]})
df_transformed = (df .assign(C=lambda x: x['A'] + x['B']) .query('C > 15') .rename(columns={'A': 'alpha', 'B': 'beta'}))
print(df_transformed)
|
[実行結果]
alpha beta C
1 2 20 22
2 3 30 33
8. Window関数
Window関数を使ってローリング計算や移動平均を計算します。
1 2 3 4 5 6 7
| df = pd.DataFrame({'A': range(10)})
df['moving_average'] = df['A'].rolling(window=3).mean()
print(df)
|
[実行結果]
A moving_average
0 0 NaN
1 1 NaN
2 2 1.0
3 3 2.0
4 4 3.0
5 5 4.0
6 6 5.0
7 7 6.0
8 8 7.0
9 9 8.0
これらの高度な使い方を活用することで、Pandasを使ったデータ操作や分析がさらに効率的かつ強力になります。