2016-09-20 4 views
1

Ich habe folgenden Datenrahmen dfPandas: Scheibe Datenrahmen basierend auf NaN

prod_id prod_ref 
10  ef3920 
12  bovjhd 
NaN  lkbljb 
NaN  jknnkn 
30  kbknkn 

ich folgendes versuche:

df[df['prod_id'] != np.nan] 

aber ich habe genau den gleichen Datenrahmen.

würde Ich mag

prod_id prod_ref 
10  ef3920 
12  bovjhd 
30  kbknkn 

angezeigt Was mache ich falsch?

Antwort

3

Verwenden Sie die Funktion notnull oder isnull Umkehren:

print (df[df.prod_id.notnull()]) 
    prod_id prod_ref 
0  10.0 ef3920 
1  12.0 bovjhd 
4  30.0 kbknkn 

print (df[~df.prod_id.isnull()]) 

    prod_id prod_ref 
0  10.0 ef3920 
1  12.0 bovjhd 
4  30.0 kbknkn 

Eine andere Lösung ist dropna, aber Spalte für den Check NaN angeben muss:

print (df.dropna(subset=['prod_id'])) 
    prod_id prod_ref 
0  10.0 ef3920 
1  12.0 bovjhd 
4  30.0 kbknkn 

Wenn in weiteren Spalten sind nicht NaN Werte, verwenden Alberto Garcia-Raboso's solution.

+0

@gabra - danke für die Bearbeitung, leider bearbeite ich die Antwort auch, so dass die Community abgelehnt – jezrael

+0

Danke, dass es funktioniert hat. Genau was ich wollte. –

3

Das Problem ist, dass np.nan != np.nan ist True (alternativ np.nan == np.nan ist False). Pandas bietet die .dropna() Methode zu tun, was Sie wollen:

df.dropna() 

Ausgang:

prod_id prod_ref 
0  10.0 ef3920 
1  12.0 bovjhd 
4  30.0 kbknkn 

standardmäßig .dropna() wird jede Zeile löschen, die eine NaN in jeder Spalte. Sie können dieses Verhalten auf zwei Arten zwicken:

  • Prüfung nur einige Spalten der subset Argument und
  • verlangen, dass die Reihe NaN in alle Spalten enthält (in der subset, wenn Sie es verwenden) how='all' — der Standardwert ist how='any'.

Sie können die documentation überprüfen.

+0

Vielen Dank, besonders für die Erklärung 'np.nan! = Np.nan' und' np.nan == np.nan'. –

Verwandte Themen