3 回答

TA貢獻1875條經驗 獲得超5個贊
這是因為您在列而不是行中應用了該函數。
例子:
data = pd.DataFrame([[np.NaN, 1], [np.NaN, 2], [np.NaN, 1]], columns=["age", "pclass"])
print(data)
輸出
age pclass
0 NaN 1
1 NaN 2
2 NaN 1
軸 = 0
data[['age','pclass']].apply(print, axis=0)
輸出
0 None
1 None
2 None
Name: age, dtype: object
0 1
1 2
2 1
Name: pclass, dtype: object
//Iterate through columns
軸 = 1
data[['age','pclass']].apply(print, axis=1)
輸出
age None
pclass 1
Name: 0, dtype: object
age None
pclass 2
Name: 1, dtype: object
age None
pclass 1
Name: 2, dtype: object
//Iterate through the row

TA貢獻1810條經驗 獲得超4個贊
axis 屬性意味著您沿著該軸應用函數:
column1 column2
+-------+---------+
row1 | | | ----> axis1
+-------+---------+
row2 | | |
+-------+---------+
|
V
axis 0
如果您考慮這樣的函數:
def sum(cols):
s = 0
for i in cols:
s +=i
return s
并將其應用到數據框 df:
total_sum = df.apply(sum, axis = 0)
它將采用第一列 1 并按照上面草圖中箭頭(軸 0)的方向逐行應用函數。接下來它將采用下一個column2,依此類推。最后您將得到每列的總和。
對于 axis = 1,它將采用 row1 并按列應用該函數。然后將需要 row2 等等。結果,您將獲得每行的總和。
在您的軸等于 0 的示例中,它將“年齡”列作為系列傳遞給您的 impute_age 函數。然后,您僅訪問該系列的前兩個值(行)(cols[0] 和 cols[1])。下一欄也會發生同樣的情況。那不是你想要的。
相反,您希望將每一行傳遞給函數并訪問列,因此您必須指定 axis = 1。
添加回答
舉報