2016-03-19 9 views
3

Ich habe eine SQL-Datei, die aus den Daten besteht, unter denen ich in Pandas lesen.Pandas Filtern und Vergleichen von Daten

df = pandas.read_sql('Database count details', con=engine, 
        index_col='id', parse_dates='newest_available_date') 

Ausgabe

id  code newest_date_available 
9793708 3514 2015-12-24 
9792282 2399 2015-12-25 
9797602 7452 2015-12-25 
9804367 9736 2016-01-20 
9804438 9870 2016-01-20 

Die nächste Codezeile ist letzte Woche Datum

date_before = datetime.date.today() - datetime.timedelta(days=7) # Which is 2016-01-20 

zu bekommen, was ich versuche, zu tun date_before mit df und Druck vergleichen out alle Zeilen, die weniger als date_before

ist

if (df['newest_available_date'] < date_before): print(#all rows)

Offensichtlich gibt mir ein Fehler The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Wie soll ich das tun?

Antwort

5

Ich würde wie eine Maske tun:

a = df[df['newest_date_available'] < date_before] 

Wenn date_before = datetime.date(2016, 1, 19), diese zurückgibt:

 id code newest_date_available 
0 9793708 3514   2015-12-24 
1 9792282 2399   2015-12-25 
2 9797602 7452   2015-12-25 
+0

Ich bekomme immer noch den Fehler 'Der Wahrheitswert einer Serie ist mehrdeutig. Benutze a.empty, a.bool(), a.item(), a.any() oder a.all(). ' –

+0

Ich habe deinen Datenrahmen kopiert und lese ihn mit' df = pd.read_clipboard (parse_dates = [ 'next_date_available']) ', und dann funktionierte der Prozess gut. Versuchen Sie es auf diese Weise und lassen Sie mich wissen, wenn Sie noch Probleme haben. Denken Sie daran, dass der 'parse_dates' -Parameter eine Liste in Ihrer' pd.read_sql (parse_dates = ['nearest_available_data']) 'erfordert. –

+0

Ich habe 'a = df [df [' next_date_available ']

0

außerdem sicher, dass Ihre Spalte Datetime-Typ ist. Verwenden Sie

df.dtypes 
Verwandte Themen