如何用平均值填充空值

Posted

技术标签:

【中文标题】如何用平均值填充空值【英文标题】: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。请先阅读帮助中心,如何在这个论坛上提出一个好的问题:***.com/help/how-to-ask。这样我们可以更好地理解您的问题,并可以帮助您解决问题。 你是从 csv 读取这个吗? 【参考方案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 - 点击答案旁边的复选标记 () 将其从灰色切换为已填充。谢谢。跨度>

以上是关于如何用平均值填充空值的主要内容,如果未能解决你的问题,请参考以下文章

如何用excel快速实现“平均值±标准差”

我应该如何用其他两列的平均值更新 MySQL 表列?

如何用C++或C编写求MAX,MIN,平均值,均方差

如何用python实现函数?

excel表格中如何用一个值查询表格中的相关值

win7如何用电脑计算器计算总和,平均值和总体标准偏差