2016-07-07 1 views
4

Also versuche ich herauszufinden, wie man NaN in pd.DataFrame ersetzen kann ..? Hier im Beispiel habe ich den 3x3-Datenrahmen, Wert in df[1][2] = 'a' und der Rest ist NaNWie kann man mit appmap, lambda und dataframe Daten in Python filtern/modifizieren?

Mein Verständnis ist, dass ich if mit in lambda und etwas weiter unten verwenden kann. Aber das Ergebnis war nicht das, was ich erwartet habe, es überschreiben 'a'. Ich möchte immer noch 'a' bleiben, wie es ist und nur zu 'o' wechseln wo ist NaN ... Jede Empfehlung wäre willkommen.

enter image description here

df = pd.DataFrame(index=range(0,3),columns=range(0,3)) 
df[1][2] = 'a' 
f = lambda x: 'o' if np.nan else x 
df.applymap(f) 

Antwort

3

np.nan nicht wirklich den Wert zurück, die Sie erwarten, um ein gültiges Prädikat zu erstellen, können Sie pd.isnull verwenden:

df = pd.DataFrame(index=range(0,3),columns=range(0,3)) 
df[1][2] = 'a' 
f = lambda x: 'o' if pd.isnull(x) else x 
df.applymap(f) 

# 0 1 2 
#0 o o o 
#1 o o o 
#2 o a o 

Um zu sehen, warum es geschieht, Sie np.nan zu boolean umwandeln kann:

So gibt es immer wahren Wert zurück, so dass alle Werte im Datenrahmen durch o ersetzt werden.

5

Statt apply verwenden, könnten Sie fillna verwenden.

df.fillna('o') 

Weitere Informationen über Working with missing data. Sie können auch apply mit pd.isnull() wie in @Psidom Antwort erwähnt verwenden. In diesem Fall sollten Sie jedoch die integrierte Funktion fillna verwenden.

Verwandte Themen