Pandas Dataframe のカラムに関数を適用する
-
Pandas の
apply()
とtransform()
メソッド -
apply()
を使用して、Pandas DataFrame 列に関数を適用する -
transform()
を使用して、Pandas DataFrame 列に関数を適用する
Pandas では、カラムや DataFrame は apply()
や transform()
などのメソッドを使って変換したり操作したりすることができます。必要な変換は、関数としてメソッドの引数として渡されます。それぞれのメソッドには微妙な違いや有用性があります。この記事では、列や DataFrame 全体に関数を適用する方法を紹介します。
Pandas の apply()
と transform()
メソッド
apply()
メソッドと transform()
メソッドはどちらも個々の列や DataFrame 全体に対して操作を行います。apply()
メソッドは指定した軸に沿って関数を適用します。一方、transform()
メソッドは個々のカラムを Pandas の Series
としてカスタム関数に渡します。
apply()
メソッドの出力は入力に応じて Dataframe または Series
の形式で受け取られますが、transform()
メソッドの場合はシーケンスとして受け取られます。apply()メソッドと transform()
メソッドの構文はどちらも似ています。
Dataframe.apply(customFunction, axis=0)
Dataframe.transform(customFunction, axis=0)
引数は以下のように対応しています。
customFunction
:DataFrame または系列に適用する関数。axis
:0 は'rows'
を指し、1 はcolumns'
を指します。
apply()
を使用して、Pandas DataFrame 列に関数を適用する
それでは、基本的なことをマスターしたので、コードに手を入れて、apply()
メソッドを使って DataFrame の列に関数を適用する方法を理解してみましょう。
以下のようなサンプル DataFrame を使用します。
import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)
DataFrame 全体に関数を適用するコード例を以下に示します。
import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)
def add_2(x):
return x + 2
df = df.apply(add_2)
print(df)
出力:
A B C
0 1 2 3
1 4 5 6
2 7 8 9
A B C
0 3 4 5
1 6 7 8
2 9 10 11
上記のように、関数を DataFrame 全体に適用することができます。
単一の列に関数を適用する
関数を単一の列に沿って適用するとどうなるか見てみましょう。
import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)
def add_2(x):
return x + 2
df["A"] = df["A"].apply(add_2)
print(df)
# or #
df["A"].transform(add_2)
print(df)
出力:
A B C
0 1 2 3
1 4 5 6
2 7 8 9
A B C
0 3 2 3
1 6 5 6
2 9 8 9
transform()
を使用して、Pandas DataFrame 列に関数を適用する
DataFrame のカラムに関数を適用するために transform()
メソッドを使用する方法を見てみましょう。ここでは、上記と同じサンプル DataFrame を使用します。
以下に、DataFrame 全体に関数を適用する例のコードを示します。
import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)
def add_2(x):
return x + 2
df = df.transform(add_2)
print(df)
出力:
A B C
0 1 2 3
1 4 5 6
2 7 8 9
A B C
0 3 4 5
1 6 7 8
2 9 10 11
上記のように、DataFrame 全体に関数を適用することができます。
単一列に関数を適用する
関数を単一の列に沿って適用するとどうなるか見てみましょう。
import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)
def add_2(x):
return x + 2
df["A"] = df["A"].transform(add_2)
print(df)
出力:
A B C
0 1 2 3
1 4 5 6
2 7 8 9
A B C
0 3 2 3
1 6 5 6
2 9 8 9