2017-06-05 4 views
2

Ich habe eine Frage zum Vergleich von Daten von datetime64 [ns] und Datum wie '2017-01-01'.Python: Daten von verschiedenen Datumsarten vergleichen

hier ist der Code: df.loc[(df['Date'] >= datetime.date(2017.1.1), 'TimeRange'] = '2017.1'

aber ist ein Fehler gezeigt und gesagt worden ist descriptor 'date' requires a 'datetime.datetime' object but received a 'int'.

Wie kann ich eine datetime64 zu Daten (2017.01.01 oder vergleichen 2-17-6- 1 und gefällt)

Dank

+0

Sie sollten Ihr Datum umwandeln, um den gleichen Typ zu haben, um es zu vergleichen, können Sie zum Beispiel diesen Beitrag sehen: https://StackOverflow.com/questions/466345/converting-string-into-datetime – Dadep

+0

Ihr Code hat ein Syntaxfehler (unverschlüsselt '(' vor 'df ['Date']') .Posten Sie bitte den Code, der zusammen mit dem Traceback zu dem bestimmten Fehler führt. – Billy

+0

Vielen Dank, @Dadep. große Referenz. –

Antwort

3

Demo:

Quelle DF:

In [83]: df = pd.DataFrame({'tm':pd.date_range('2000-01-01', freq='9999T', periods=20)}) 

In [84]: df 
Out[84]: 
        tm 
0 2000-01-01 00:00:00 
1 2000-01-07 22:39:00 
2 2000-01-14 21:18:00 
3 2000-01-21 19:57:00 
4 2000-01-28 18:36:00 
5 2000-02-04 17:15:00 
6 2000-02-11 15:54:00 
7 2000-02-18 14:33:00 
8 2000-02-25 13:12:00 
9 2000-03-03 11:51:00 
10 2000-03-10 10:30:00 
11 2000-03-17 09:09:00 
12 2000-03-24 07:48:00 
13 2000-03-31 06:27:00 
14 2000-04-07 05:06:00 
15 2000-04-14 03:45:00 
16 2000-04-21 02:24:00 
17 2000-04-28 01:03:00 
18 2000-05-04 23:42:00 
19 2000-05-11 22:21:00 

Filter:

In [85]: df.loc[df.tm > '2000-03-01'] 
Out[85]: 
        tm 
9 2000-03-03 11:51:00 
10 2000-03-10 10:30:00 
11 2000-03-17 09:09:00 
12 2000-03-24 07:48:00 
13 2000-03-31 06:27:00 
14 2000-04-07 05:06:00 
15 2000-04-14 03:45:00 
16 2000-04-21 02:24:00 
17 2000-04-28 01:03:00 
18 2000-05-04 23:42:00 
19 2000-05-11 22:21:00 

In [86]: df.loc[df.tm > '2000-3-1'] 
Out[86]: 
        tm 
9 2000-03-03 11:51:00 
10 2000-03-10 10:30:00 
11 2000-03-17 09:09:00 
12 2000-03-24 07:48:00 
13 2000-03-31 06:27:00 
14 2000-04-07 05:06:00 
15 2000-04-14 03:45:00 
16 2000-04-21 02:24:00 
17 2000-04-28 01:03:00 
18 2000-05-04 23:42:00 
19 2000-05-11 22:21:00 

nicht Standard Datumsformat:

In [87]: df.loc[df.tm > pd.to_datetime('03/01/2000')] 
Out[87]: 
        tm 
9 2000-03-03 11:51:00 
10 2000-03-10 10:30:00 
11 2000-03-17 09:09:00 
12 2000-03-24 07:48:00 
13 2000-03-31 06:27:00 
14 2000-04-07 05:06:00 
15 2000-04-14 03:45:00 
16 2000-04-21 02:24:00 
17 2000-04-28 01:03:00 
18 2000-05-04 23:42:00 
19 2000-05-11 22:21:00 
+0

Vielen Dank, sehr einfach zu verstehen –

2

Sie müssen sicherstellen, dass die Daten, die Sie mit dem Vergleich sind auch im gleichen Format. Unter der Annahme, dass Sie zwei datetime Objekte haben, können Sie es wie folgt tun:

import datetime 
print(df.loc[(df['Date'] >= datetime.date(2017, 1, 1), 'TimeRange']) 

Dies wird ein datetime-Objekt erstellen und die gefilterten Ergebnisse auflisten. Sie können den Ergebnissen auch einen aktualisierten Wert zuweisen, wie oben erwähnt.

+0

Vielen Dank, sehr einfach zu verstehen. –

Verwandte Themen