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 它是一個整數或字串。它告訴目標軸的行或列。它可以是 0index 代表行,1columns 代表列。
*args 這些是要傳遞給函式的位置引數
**kwargs 這些是傳遞給函式的附加關鍵字引數

返回值

它返回一個轉換後的 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

這個函式只有一個必須的引數,即 func。現在,我們將使用這個函式在 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

我們傳遞了一個由兩個函式名組成的 “list”,即 ['sqrt', 'exp'] 作為 func。返回的 DataFrame 包含了兩個額外的列,因為有一個額外的函式。

DataFrame.apply() vs DataFrame.transform() 函式

我們也可以使用 DataFrame.apply() 函式來實現上述結果。但如果我們比較一下這兩個函式,就會發現 DataFrame.transform() 函式在處理複雜的操作時更有效率。

相關文章 - Pandas DataFrame