【问题标题】:How to fill null values with mean如何用平均值填充空值
【发布时间】:2018-01-16 22:03:32
【问题描述】:

我有数据:

print (df)
      Sex  Age  SbSp  Parch
0    male   22     1      0
1  female   38     1      0
2  female  NAN     0      0

有一些 NAN 值。我想填写平均值。

我确实用过

df1 = df["Age"].fillna(value=df["Age"].mean()

但这并没有影响我的数据集。

什么问题?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请先阅读帮助中心,如何在这个论坛上提出一个好的问题:stackoverflow.com/help/how-to-ask。这样我们可以更好地理解您的问题,并可以帮助您解决问题。
  • 你是从 csv 读取这个吗?

标签: pandas replace nan


【解决方案1】:

我认为有问题NAN 不是np.nan 值(缺失),而是字符串NANs。所以需要replace然后转换成float

df['Age'] = df['Age'].replace({'NAN':np.nan}).astype(float)
df["Age"] = df["Age"].fillna(value=df["Age"].mean())

另一个更通用的解决方案是通过to_numericerrors='coerce' 将非数字转换为NaNs

df['Age'] = pd.to_numeric(df['Age'], errors='coerce')
df["Age"] = df["Age"].fillna(value=df["Age"].mean())
print (df)
      Sex   Age  SbSp  Parch
0    male  22.0     1      0
1  female  38.0     1      0
2  female  30.0     0      0

如果使用 read_csv 添加参数na_valuesNANs 转换为np.nan

df = pd.read_csv(file, na_values='NAN')

【讨论】:

  • 如果我这样做我得到这个错误 TypeError: Cannot compare types 'ndarray(dtype=float64)' and 'str'
  • 对不起,我重写了解决方案。
  • 如果我的回答对您有帮助,请不要忘记accept - 点击答案旁边的复选标记 () 将其从灰色切换为已填充。谢谢。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
相关资源
最近更新 更多