2017-01-09 1 views
0

ich über eine Lookup einen skalar Wert in einem mehrspaltigen Datenrahmen zuzugreifen versuchen wie folgt:was ist, wenn Indexzugriff nicht in Pandas df

targetDate = '2016-01-01' 
df['revenue'][df['date']== targetDate].values[0] 

Nun, es in meinem Fall ist nichts in dem Datenrahmen gefunden die targetDate. So erhalte ich die folgenden Indexfehler:

IndexError: ('index 0 is out of bounds for axis 0 with size 0', 'occurred at index 69322') 

Gibt es eine Pandas integrierte Möglichkeit, anmutig in np.nan in solchen Fällen führen? Wie würdest du mit einer solchen Situation umgehen?

Ich möchte nicht, dass mein Skript fehlschlägt, wenn nichts gefunden wird.

Antwort

1

Sie können prüfen, ob Series leer ist und dann if-else hinzufügen:

targetDate = '2016-01-01' 
a = df.loc[df['date']== targetDate, 'revenue'] 
print (a) 
Series([], Name: revenue, dtype: int32) 

if len(a) == 0: 
    print ('empty') 
else: 
    first_val = a.values[0] 

ähnliche Lösung mit Series.empty:

if a.empty: 
    first_val = np.nan 
else: 
    first_val = a.values[0] 

print (first_val) 
+0

Okay, so einfach Standard-Ausnahmebehandlung ... Ich dachte, dass vielleicht etwas in Pandas eingebaut war. Keine Bange. Ich werde deinem Rat folgen. – codingknob

1

Wenn Sie mit head(1) vorangehen und entfernen Sie den Index auf Werte dann, dass vermeidet die Fehlermeldung, obwohl es nicht mit einem Nan füllen wird (es wird nur ein leeres numpy-Array sein).

Aber Sie könnten etwas tun, um eine Nan statt leer zu bekommen.

df['revenue'][df['date']== targetDate].append(pd.Series(np.nan)).head(1).values 

Oder es als try/except oder einem if/else als @jezrael tut. Viele Möglichkeiten, dies zu tun, hängt natürlich davon ab, was für Sie bequem ist.