“axis”属性在下面的代码中如何工作?

这段代码是用 Python 编写的。Pandas 数据框名称是“train”,数据框中的列名称是带有浮动值的“Age”和带有一些分类数字的“Pclass”。


代码:


请找到以下代码:


def impute_age(cols):

    Age = cols[0]

    Pclass = cols[1]

    

    if pd.isnull(Age):


        if Pclass == 1:

            return 37


        elif Pclass == 2:

            return 29


        else:

            return 24


    else:

        return Age

train['Age'] = train[['Age','Pclass']].apply(impute_age,axis=0)

这里“年龄”列变成了 NAN。我不明白轴列是如何工作的,“年龄”列中的所有记录都变成了 NAN。


波斯汪
浏览 98回答 3
3回答

侃侃尔雅

Axis 代表您想要指向的轴,0 表示行,1 表示列。因此,在此示例中,您在 Age 和 P 类列的行上使用 impute_age 函数。

慕田峪4524236

这是因为您在列而不是行中应用了该函数。例子: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    None1    None2    NoneName: age, dtype: object0    11    22    1Name: pclass, dtype: object//Iterate through columns轴 = 1 data[['age','pclass']].apply(print, axis=1)输出 age       Nonepclass       1Name: 0, dtype: objectage       Nonepclass       2Name: 1, dtype: objectage       Nonepclass       1Name: 2, dtype: object//Iterate through the row 

慕莱坞森

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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python