简体   繁体   English

python:比较不同日期类型的数据

[英]python: compare data of different date types

I have a question of comparing data of datetime64[ns] and date like '2017-01-01'. 我有一个比较datetime64 [ns]的数据和'2017-01-01'之类的日期的问题。

here is the code: df.loc[(df['Date'] >= datetime.date(2017.1.1), 'TimeRange'] = '2017.1' 这是代码: df.loc[(df['Date'] >= datetime.date(2017.1.1), 'TimeRange'] = '2017.1'

but , an error has been showed and said descriptor 'date' requires a 'datetime.datetime' object but received a 'int'. 但是,已显示错误,并且descriptor 'date' requires a 'datetime.datetime' object but received a 'int'.

how can i compare a datetime64 to data (2017-01-01 or 2-17-6-1 and likes) 我怎样才能将datetime64与数据进行比较(2017-01-01或2-17-6-1等)

Thanks 谢谢

Demo: 演示:

Source DF: 来源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

Filtering: 过滤:

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

not standard date format: 不是标准的日期格式:

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

You need to ensure that the data you're comparing it with is also in the same format. 您需要确保与其进行比较的数据也采用相同的格式。 Assuming that you have two datetime objects, you can do it like this: 假设您有两个datetime对象,您可以这样做:

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

This will create a datetime object and list out the filtered results. 这将创建一个datetime对象并列出筛选结果。 You can also assign the results an updated value as you have mentioned above. 您还可以如上所述为结果分配更新值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM