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。
添加回答
举报