Pandas apply, map 和 applymap 的區別
本教程解釋了 Pandas 中 apply()
、map()
和 applymap()
方法之間的區別。
與 applymap()
相關聯的函式被應用於給定的 DataFrame 的所有元素,因此 applymap()
方法只針對 DataFrames 定義。同樣,與 apply()
方法相關聯的函式可以應用於 DataFrame 或 Series
的所有元素,因此 apply()
方法是為 Series 和 DataFrame 物件定義的。Pandas 中的 map()
方法只能為 Series
物件定義。
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print(df, "\n")
輸出:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
我們將使用上例中顯示的 DataFrame df
來解釋 Pandas 中 apply()
、map()
和 applymap()
方法之間的區別。
pandas.DataFrame.applymap()
語法
DataFrame.applymap(func, na_action=None)
它將函式 func
應用於 DataFrame
的每個元素。
示例:使用 applymap()
方法來改變 DataFrame 中的元素
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
scaled_df = df.applymap(lambda a: a * 10)
print("Scaled DataFrame:")
print(scaled_df, "\n")
輸出:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
Scaled DataFrame:
Col 1 Col 2 Col 3
A 300 230 850
B 400 350 870
C 500 650 900
D 600 450 890
它對 df
DataFrame 中的每個元素相乘,並將結果儲存在 scaled_df
DataFrame 中。我們將一個 lambda
函式作為引數傳遞給 applymap()
函式,該函式通過將輸入值與 10
相乘返回一個值。所以 DataFrame df
中的每一個元素都會被縮放為 10。
我們也可以使用 for
迴圈來迭代 df
DataFrame 中的每個元素,但它使我們的程式碼可讀性降低,凌亂,效率降低。applymap()
是另一種替代方法,可以使程式碼更具可讀性和效率。
除了數學運算,我們還可以對 DataFrame 的元素進行其他操作。
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
altered_df = df.applymap(lambda a: str(a) + ".00")
print("Altered DataFrame:")
print(altered_df, "\n")
輸出:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
Altered DataFrame:
Col 1 Col 2 Col 3
A 30.00 23.00 85.00
B 40.00 35.00 87.00
C 50.00 65.00 90.00
D 60.00 45.00 89.00
它在 DataFrame df
中的每個元素的末尾新增 .00
。
Pandas 中的 map()
方法
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
df["Col 1"] = df["Col 1"].map(lambda x: x / 100)
print("DataFrame after altering Col 1:")
print(df)
輸出:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
DataFrame after altering Col 1:
Col 1 Col 2 Col 3
A 0.3 23 85
B 0.4 35 87
C 0.5 65 90
D 0.6 45 89
我們只能對 DataFrame 的特定列使用 map()
方法。
Pandas 中的 apply()
方法
apply()
方法改變 Pandas 中的整個 DataFrame
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
altered_df = df.apply(lambda x: x / 100)
print("Altered DataFrame:")
print(altered_df, "\n")
輸出:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
Altered DataFrame:
Col 1 Col 2 Col 3
A 0.3 0.23 0.85
B 0.4 0.35 0.87
C 0.5 0.65 0.90
D 0.6 0.45 0.89
apply()
方法在 Pandas 中只修改某一列
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
df["Col 1"] = df["Col 1"].apply(lambda x: x / 100)
print("DataFrame after altering Col 1:")
print(df)
輸出:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
DataFrame after altering Col 1:
Col 1 Col 2 Col 3
A 0.3 23 85
B 0.4 35 87
C 0.5 65 90
D 0.6 45 89
因此,從上面的例子中,我們可以看到,apply()
方法可以用來將一個特定的函式應用於整個 DataFrame 的所有元素或某一列的所有元素。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn