2017-09-18 2 views
0

ich folgendes Wörterbuch haben:Wie mit `None` Wert in Pandas gehen fillna

fillna(value={'first_name':'Andrii', 'last_name':'Furmanets', 'created_at':None})

Als ich das Wörterbuch zu fillna gehe ich sehen:

raise ValueError('must specify a fill method or value')\nValueError: must specify a fill method or value\n"

Es scheint mir, dass es auf None Wert scheitert.

Ich benutze Pandas Version 0.20.3.

+0

Tippfehler passieren um last_name 'd = { 'first_name': 'Andrii', 'last_name': 'Furmanets', 'created_at': Keine}' – Wen

+1

in einem Schwimmer Spalte, keine ist de-facto vertreten durch np.nan (und in den meisten Typen). Das ergibt also keinen Sinn. Sehen Sie die Dokumentation hier von https://github.com/pandas-dev/pandas/issues/10871 – Wen

+0

Verpasste ein einfaches Zitat (') nach dem Nachnamen, wie @Wen sagte. Kannst du deinen Beitrag bearbeiten? –

Antwort

1

Welche Art von Datenstruktur verwenden Sie? Dies funktioniert für eine Pandas Serie:

import pandas as pd 

d = pd.Series({'first_name': 'Andrii', 'last_name':'Furmanets', 'created_at':None}) 
d = d.fillna('DATE') 
+0

Ich benutze Dictionary nicht String. –

+0

Was möchten Sie mit 'None' ersetzen? – atwalsh

+0

Es könnte sogar "None" sein. –

1

Setup-
die Probe Datenrahmen Betrachten df

df = pd.DataFrame(dict(A=[1, None], B=[None, 2], C=[None, 'D'])) 

df 

    A B  C 
0 1.0 NaN None 
1 NaN 2.0  D 

ich den Fehler bestätigen können

df.fillna(dict(A=1, B=None, C=4)) 
ValueError: must specify a fill method or value 

Dies geschieht beca pandas verwendet zyklisch die Tasten im Wörterbuch und führt für jede relevante Spalte einen fillna aus. Wenn Sie bei der Unterzeichnung des Verfahrens pd.Series.fillna aussehen

Series.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) 

Sie werden der Standardwert sehen None ist. So können wir diesen Fehler mit

df.A.fillna(None) 

replizieren oder äquivalent

df.A.fillna() 

ich will hinzufügen, dass ich nicht sehr überrascht, bedenkt, dass Sie einen Nullwert mit einem Nullwert zu füllen versuchen.


Was Sie brauchen, ist eine Arbeit um

Lösung
Verwenden pd.DataFrame.fillna über Spalten, die Sie mit Nicht-Null-Werte füllen wollen. Dann folgen Sie einem pd.DataFrame.replace für die spezifischen Spalten, die Sie einen Nullwert mit einem anderen tauschen möchten.

df.fillna(dict(A=1, C=2)).replace(dict(B={np.nan: None})) 

    A  B C 
0 1.0 None 2 
1 1.0  2 D 
+0

I 'Wert' als Parameter in' fillna', wie folgt: 'df.fillna (Wert = dict (A = 1, B = Keine, C = 4))' –

+0

Ist es das gleiche? –

+0

Ja. Es ist das Gleiche. – piRSquared

Verwandte Themen