2017-06-05 79 views
2

我有一个比较datetime64 [ns]和日期如'2017-01-01'的数据的问题。python:比较不同日期类型的数据

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

但是,错误已经显示说descriptor 'date' requires a 'datetime.datetime' object but received a 'int'.

我如何可以比较datetime64数据(2017年1月1日或2-17-6- 1个喜欢)

由于

+0

你应该改变你的日期有相同的类型,以便能够比较一下就可以,例如看到这个帖子:https://stackoverflow.com/questions/466345/converting-string-into-datetime – Dadep

+0

您的代码一个语法错误(''''''''''''''''之前''''''''之前'''''''''''''''''''''。请发布代码,导致出现特定的错误以及跟踪。 – Billy

+0

谢谢@Dadep。很好的参考 –

回答

3

演示:

来源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 

过滤:

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 

不标准的日期格式:

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

谢谢,很容易理解。 –

2

你需要确保你与它比较的数据也是相同的格式。假设你有两个datetime对象,你可以做这样的:

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

这将创建一个datetime对象,并列出了筛选的结果。如上所述,您也可以为结果分配更新的值。

+0

谢谢,很容易理解。 –