2017-08-09 2 views
1

I-Daten haben:Wie füllen Nullwerte mit dem Mittelwert

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

Es gibt einige NAN-Wert. Ich möchte mit Mittelwert auffüllen.

Ich habe

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

verwenden, aber es hat meinen Datensatz nicht beeinflussen.

Was ist ein Problem?

+2

Willkommen Stapelüberlauf. Bitte lesen Sie zuerst in der Hilfe, wie Sie eine gute Frage in diesem Forum stellen: https://stackoverflow.com/help/how-to-ask. So können wir Ihre Frage besser verstehen und Ihnen bei Ihren Problemen helfen. –

+0

Liest du das von csv? –

Antwort

1

Ich denke, es gibt ein Problem NAN sind nicht np.nan Werte (fehlt), aber Strings NAN s. So replace müssen und werfen dann float:

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

Eine weitere allgemeine Lösung ist nicht numerisch konvertieren NaNs von to_numeric mit errors='coerce':

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 

Wenn Verwendung read_csv Parameter hinzufügen na_values für convert NAN s np.nan :

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

Wenn ich das tue, habe ich diesen Fehler TypeError: Kann Typen 'ndarray (dtype = float64)' und 'str' nicht vergleichen –

+0

Sorry, ich überschreibe Lösung. – jezrael

+0

Wenn meine Antwort hilfreich war, vergessen Sie nicht [accept] (http://meta.stackexchange.com/a/5235/295067) es - klicken Sie auf das Häkchen ('✓') neben der Antwort, um es umzuschalten ausgegraut, um ausgefüllt zu werden. Danke. – jezrael

Verwandte Themen