2017-08-09 35 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