无法将 lambda 函数应用于数据集

saa*_*ani 1 python lambda if-statement dataframe pandas

该数据集包含 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)
Run Code Online (Sandbox Code Playgroud)

但这是我收到的错误:

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

KeyError: 'Age'
Run Code Online (Sandbox Code Playgroud)

请让我知道我做错了什么。先感谢您。

jez*_*ael 5

使用DataFrame.applyaxis=1

df['Age'] = df.apply(fill_age, axis=1)
Run Code Online (Sandbox Code Playgroud)

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

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