【问题标题】:Not able to apply lambda function to a dataset无法将 lambda 函数应用于数据集
【发布时间】:2022-01-21 10:43:57
【问题描述】:

数据集包含一个 Pclass 列,其值为 (1, 2, 3) 和 Age。Age 列有一些空值。 我想用不同班级的人的中位年龄替换那些空值。 一等人的平均年龄是37岁,二等人是29岁,三等人是24岁。

所以这是我想要做的代码:

def fill_age(x):
    if pd.isna(x['Age']) and x['Pclass'] == 1:
        return 37
    elif pd.isna(x['Age']) and x['Pclass'] == 2:
        return 29
    elif pd.isna(x['Age']) and x['pclass'] == 3:
        return 24
    else:
        return x['Age']


df['Age'] = df.apply(fill_age)

但这是我得到的错误:

KeyError                                  Traceback (most recent call last)
<ipython-input-126-7375a6b3c119> in <module>
----> 1 df['Age'] = df.apply(fill_age)

KeyError: 'Age'

请让我知道我做错了什么。 提前谢谢你。

【问题讨论】:

  • 提示:当fill_age 在内部被df.apply 调用时,你期望什么会被传递为xdf.apply 的文档对此有何评论?您希望它是数据框的一行还是一列?文档如何说你应该指定这个?

标签: python pandas dataframe if-statement lambda


【解决方案1】:

根据axis=1 使用DataFrame.apply

df['Age'] = df.apply(fill_age, axis=1)

对于矢量化(更快)替代使用 Series.fillna 并通过字典映射 Series.map

df['Age'] = df['Age'].fillna(df['Pclass'].map({1:37,2:29,3:24}))

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2020-09-05
    • 2018-06-19
    • 1970-01-01
    • 2014-12-02
    • 2020-02-17
    相关资源
    最近更新 更多