2017-08-09 31 views
1

有数据:我如何填写空值与平均值

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() 

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

什么是问题?

+2

欢迎堆栈溢出。请先阅读帮助中心,如何在此论坛上提出一个好问题:https://stackoverflow.com/help/how-to-ask。因此,我们可以更好地解决您的问题,并可以帮助解决您的问题。 –

+0

你是从csv读这个吗? –

回答

1

我觉得有问题NAN不是np.nan值(缺失),而是字符串NAN s。因此,需要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 NAN的add参数na_values为皈依np.nan

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

如果我这样做,我得到了这个错误 TypeError:无法比较类型的'ndarray(dtype = float64)'和'str' –

+0

对不起,我重写了解决方案。 – jezrael

+0

如果我的回答很有帮助,请不要忘记[接受](http://meta.stackexchange.com/a/5235/295067)它 - 点击答案旁边的复选标记('✓')将其切换灰色填充。谢谢。 – jezrael