Pandas DataFrame DataFrame.transform() 関数

Minahil Noor 2023年1月30日
  1. pandas.DataFrame.transform() の構文
  2. コード例:DataFrame.transform()
  3. コード例:DataFrame.transform()sqrt 文字列を関数として使用する
  4. コード例:DataFrame.transform() で関数のリストを渡す
  5. DataFrame.apply() vs DataFrame.transform() 関数
Pandas DataFrame DataFrame.transform() 関数

Python Pandas DataFrame.transform()DataFrame に関数を適用して DataFrame を変形します。適用する関数は transform() 関数のパラメータとして渡されます。変換された DataFrame の軸の長さは元の DataFrame と同じでなければならません。

pandas.DataFrame.transform() の構文

DataFrame.transform(func, axis, *args, **kwargs)

パラメータ

func これは DataFrame に適用される関数です。これは DataFrame の値に変化をもたらす。関数、関数名文字列、関数や関数名のリスト、軸ラベルの辞書を指定することができます。
axis これは整数または文字列です。これは行または列のいずれかの軸を指定します。行には 0 または index、列には 1 または columns を指定することができます。
*args これらは関数に渡す位置引数です。
**kwargs これらは、関数に渡す追加のキーワード引数です。

戻り値

変換された DataFrame は、元の DataFrame と同じ長さの DataFrame を返します。返された DataFrame の長さが不等長の場合、この関数は ValueError を発生させます。

コード例:DataFrame.transform()

まず、この関数を DataFrame の各値に数値を加えて試してみましょう。

import pandas as pd

dataframe = pd.DataFrame({
                            'A': 
                                {0: 6, 
                                1: 20, 
                                2: 80,
                                3: 78,
                                4: 95}, 
                            'B': 
                                {0: 60, 
                                1: 50, 
                                2: 7,
                                3: 67,
                                4: 54}
                        })

print(dataframe)

DataFrame の例は、

    A   B
0   6  60
1  20  50
2  80   7
3  78  67
4  95  54
5  98  34

この関数の必須パラメータは 1つだけです。ここでは、この関数を用いて DataFrame の各値に 20 を加算します。

import pandas as pd

dataframe = pd.DataFrame(
    {"A": {0: 6, 1: 20, 2: 80, 3: 78, 4: 95}, "B": {0: 60, 1: 50, 2: 7, 3: 67, 4: 54}}
)

dataframe1 = dataframe.transform(func=lambda x: x + 20)
print(dataframe1)

出力:

     A   B
0   26  80
1   40  70
2  100  27
3   98  87
4  115  74
5  118  54

ここでは、lambda キーワードを用いて匿名の加算関数を宣言します。

コード例:DataFrame.transform()sqrt 文字列を関数として使用する

import pandas as pd

dataframe = pd.DataFrame(
    {"A": {0: 6, 1: 20, 2: 80, 3: 78, 4: 95}, "B": {0: 60, 1: 50, 2: 7, 3: 67, 4: 54}}
)

dataframe1 = dataframe.transform(func="sqrt")
print(dataframe1)

出力:

          A         B
0  2.449490  7.745967
1  4.472136  7.071068
2  8.944272  2.645751
3  8.831761  8.185353
4  9.746794  7.348469
5  9.899495  5.830952

ここでは、lambda 関数を渡す代わりに、関数名を文字列として渡しています。

コード例:DataFrame.transform() で関数のリストを渡す

import pandas as pd

dataframe = pd.DataFrame(
    {"A": {0: 6, 1: 20, 2: 80, 3: 78, 4: 95}, "B": {0: 60, 1: 50, 2: 7, 3: 67, 4: 54}}
)

dataframe1 = dataframe.transform(func=["sqrt", "exp"])
print(dataframe1)

出力:

          A                       B              
       sqrt           exp      sqrt           exp
0  2.449490  4.034288e+02  7.745967  1.142007e+26
1  4.472136  4.851652e+08  7.071068  5.184706e+21
2  8.944272  5.540622e+34  2.645751  1.096633e+03
3  8.831761  7.498417e+33  8.185353  1.252363e+29
4  9.746794  1.811239e+41  7.348469  2.830753e+23

2つの関数名のリスト、すなわち ['sqrt', 'exp']func として渡しました。返された DataFrame には、追加の関数のために 2つの列が追加されています。

DataFrame.apply() vs DataFrame.transform() 関数

また、DataFrame.apply() 関数を使用しても上記の結果を得ることができます。しかし、この 2つの関数を比較してみると、複雑な操作を処理するには DataFrame.transform() 関数の方が効率が良いと言えるでしょう。

関連記事 - Pandas DataFrame