スポンサーリンク

[Pandas]行(列)ごとに処理をする

applyを使って行または列ごとに処理を実行する方法を解説します。

行(列)ごとに処理をする

データセット

import pandas as pd
from sklearn.datasets import load_diabetes
data = load_diabetes()
df = pd.DataFrame(
    data = data.data,
    columns = data.feature_names,
)
df["target"] = data.target
df

load_diabetesのデータセットを使います。

列ごとに処理をする

df["bmi"].apply(lambda x: int(x * 1000))

# ===== output =====
# 0	61
# 1	-51
# 2	44
# 3	-11
# ...

apply(lambda x: 処理)で指定した列に対して処理を実行します。
上記コードは、”bmi”を1000倍して整数にしています。

df["bmi_1000"] = df["bmi"].apply(lambda x: int(x * 1000))

こうすると処理結果を新しい列として追加できます。

行ごとに処理をする

df.apply(lambda x: x.s1 + x.s2 + x.s3 + x.s4 + x.s5 + x.s6, axis = 1)

# ===== output =====
# 0	-0.122776
# 1	-0.153229
# 2	-0.137811
# 3	0.048778
# 4	-0.053548
# ...

axis = 1にすると、行(横方向)に対して処理をします。例えばx.s1は”s1″の各行の値です。
上記コードは”s1~s6″をすべて足した結果となります。

また、x.s1の変わりにx[“s1”]と表記してもOKです。

まとめ

今回はapplyを使って行または列ごとに処理を実行する方法を解説しました。
特にaxis = 1にしたときの処理は一括で書けて便利です。
注意点として、計算時間が膨大になることがあるので、複雑な処理を書きたいなら単純にfor文で各行の処理をした方が良いこともあります。

コメント

タイトルとURLをコピーしました