【问题标题】:How to replace NaN values in Pandas conditionally?如何有条件地替换 Pandas 中的 NaN 值?
【发布时间】:2018-01-27 14:35:17
【问题描述】:

我正在使用著名的 Titanic 数据集来解决我的第一个 Kaggle 问题。我陷入了数据集。 我想替换 Age 性别明智的 NaN 值,例如“男性”的缺失值应替换为男性的平均年龄,反之亦然。 虽然我的代码运行良好但出现以下异常: “设置与复制警告: 试图在 DataFrame 中的切片副本上设置一个值 请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self._update_inplace(new_data)"

import pandas as pd
df=pd.read_csv('train.csv')
df[(df['Sex']=='male') & (df['Age'].apply(np.isnan))]['Age'].fillna(df[df['Sex']=='male']['Age'].mean(),inplace=True)

【问题讨论】:

  • 这不是一个例外,这只是一个警告。如果你用谷歌搜索那个警告文本,就会有很多信息。在很多情况下,获得预期结果没有任何区别。
  • 糟糕,我刚刚检查过了,谢谢,但是 Age 中的 NaN 值仍然没有被替换:
  • 无论如何,你得到的答案比你现有的代码优雅得多,不管是否被骗:)

标签: python pandas numpy


【解决方案1】:
import pandas as pd
import numpy as np

df = pd.read_csv('train.csv')
df['Age'].fillna(df.groupby(["Sex"])["Age"].transform(np.mean), inplace=True)

也许这是你想要做的事情?虽然我没有收到任何警告。如有必要,也请查看my blog post

【讨论】:

  • 它现在正在运行,似乎需要处理 Pandas 功能。非常感谢!! :)
猜你喜欢
  • 2018-08-28
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 2021-03-08
  • 2022-07-06
  • 1970-01-01
  • 2019-02-12
相关资源
最近更新 更多