2017-01-06 4 views
0

Ich experimentiere mit der Methode fillna(). Ich habe eine kleine Datenrahmen und zwei Serien zu diesem Zweck erstellt:fillna() - Methode Verhalten in Pandas - nicht zu Inplace-Argument gehorchen - Fehler auf Achse 1

 col1 col2 col3  col4 
    0 NaN  NaN 3   4 
    1 NaN  NaN 7   8 
    2 9.0  10.0 11   12 

    n1 = pd.Series([10, 20]) 
    n2 = pd.Series([30, 40, 50, 60]) 
    n2.index = list(df.columns.values) 

Wenn ich den Befehl versuchen:

df.fillna(n1, axis=0, inplace = True) 

Es passiert nichts, die NaNs intakt bleiben. Ich würde erwarten, dass sie mit den Werten 10 (col1) und 20 (col2) ersetzt werden. Als ich

df.fillna(n2, axis =1) 

versuchen erhalte ich eine Fehlermeldung:

NotImplementedError: Currently only can fill with dict/Series column by column 

Können Sie dieses Verhalten erklären? Ihr Rat wird geschätzt.

+0

versuchte ich das Inplace Argument und immer noch nicht funktioniert. Außerdem gibt die Methode replace einen Fehler zurück, wenn sie mit axis = 1 aufgerufen wird. Daher ist es kein Duplikat der Frage, die Sie angeben. – im7

Antwort

0

fillna (wie viele andere Methoden in Pandas) ist nicht inplace standardmäßig. Sie müssen entweder inplace=True übergeben oder seinen Rückgabewert neu zuweisen.

df.fillna(n1, axis=0, inplace=True) 

oder

df = df.fillna(n1, axis=0) 

In solchen Fällen hilft es, die Dokumentation zu lesen:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html

inplace: boolean, Standardwert False. Wenn True, füllen Sie die Stelle aus. Hinweis: Dadurch werden alle anderen Sichten auf dieses Objekt geändert (z. B. ein Nichtkopie-Schnitt für eine Spalte in einem Datenrahmen).
.
.
Returns: gefüllt: Datenrahmen

Verwandte Themen