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)
请让我知道我做错了什么。先感谢您。
使用DataFrame.apply每axis=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)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |