Pandas DataFrame DataFrame.transform()函式
Minahil Noor
2023年1月30日
2020年11月7日
-
pandas.DataFrame.transform()
的語法 -
示例程式碼:
DataFrame.transform()
-
示例程式碼:
DataFrame.transform()
使用sqrt
字串作為函式 -
示例程式碼:
DataFrame.transform()
傳遞函式列表 -
DataFrame.apply()
vsDataFrame.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
具有不等長的長度,那麼函式會引發 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()
函式在處理複雜的操作時更有效率。