2016-04-24 17 views
4

Ich habe eine importierte xls-Datei als Pandas Datenframe, gibt es zwei Spalten mit Koordinaten, die ich verwenden werde, um den Datenrahmen mit anderen, die Geolocation-Daten haben. df.info() zeigt 8859 Datensätze, die Koordinatenspalten haben '8835 non-null float64' Datensätze.Wählen Sie Zeilen aus einem DataFrame basierend auf Null-Wert in bestimmten Spalten oder Spalten

Ich möchte die 24 Zeilen (die ich annehmen, sind Null) mit allen Spalten Datensätze zu sehen, ob eine der anderen Spalten (Straße Adresse Stadt) kann nicht verwendet werden, um manuell die Koordinaten für diese 24 Datensätze hinzuzufügen . Ie. gibt den Datenrahmen für die Spalte in df zurück. ['Easting'] wobei isnull oder NaN

Ich habe die angegebene Methode here wie folgt angepasst;

df.loc[df['Easting'] == NaN] 

Aber bekommen einen leeren Datenrahmen (0 Zeilen × 24 Spalten) zurück, die keinen Sinn (für mich) macht. Der Versuch, Null oder Nicht-Null zu verwenden, funktioniert nicht, da diese Werte nicht definiert sind. Was vermisse ich?

Antwort

5

Ich glaube, Sie brauchen isnull zur Überprüfung NaN Werte mit boolean indexing:

df[df['Easting'].isnull()] 

Docs:

Warnung

One, dass in Python, aufmerksam zu sein hat (und numpy) , die NANs vergleichen nicht gleich, aber None's tun. Beachten Sie, dass Pandas/numpy die Tatsache np.nan! = Np.nan verwendet und None wie np.nan behandelt.

In [11]: None == None 
Out[11]: True 

In [12]: np.nan == np.nan 
Out[12]: False 

So im Vergleich zu oben, ein Skalar Gleichheitsvergleich im Vergleich zu einem None/np.nan bietet keine nützlichen Informationen.

In [13]: df2['one'] == np.nan 
Out[13]: 
a False 
b False 
c False 
d False 
e False 
f False 
g False 
h False 
Name: one, dtype: bool 
+0

Vielen Dank für die schnelle Antwort, die einen Reiz gearbeitet. Ich bin neu in Python und war mir der Nan und keinen Unterschied bewusst. –

+0

Froh kann dir helfen! Viel Glück! – jezrael

+0

Als eine interessante Nebensache habe ich diese Methode verwendet, um Zeilen als Teil des Reinigungsprozesses fallen zu lassen; 'NLUDData_Clean = NLUDData.dropna (Teilmenge = ['Easting'])' Obwohl ich weniger Datensätze habe, wie die von der Abfrage .info() zurückgegebene Größe die Speicherauslastung auf 1,6 + mb auf 1,7 + mb erhöht, kein Problem für mich aber interessiert zu wissen, warum für die Zukunft –

Verwandte Themen