【问题标题】:python: compare data of different date typespython:比较不同日期类型的数据
【发布时间】:2017-11-06 05:43:01
【问题描述】:

我有一个比较 datetime64[ns] 的数据和像“2017-01-01”这样的日期的问题。

代码如下: 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-01-01 或 2-17-6-1 等)进行比较

谢谢

【问题讨论】:

  • 您应该将您的日期转换为具有相同的类型以便能够比较它,例如您可以看到这篇文章:stackoverflow.com/questions/466345/…
  • 您的代码有语法错误(df['Date'] 之前未关闭的()。请将导致特定错误的代码与回溯一起发布。
  • 谢谢你,@Dadep。很好的参考。
  • 谢谢你,@Billy,我已经解决了这个问题。谢谢你告诉我这个错误。

标签: python pandas datetime dataframe compare


【解决方案1】:

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

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

这将创建一个datetime 对象并列出过滤后的结果。您还可以按照上面提到的那样为结果分配一个更新的值。

【讨论】:

  • 谢谢,很容易理解。
【解决方案2】:

演示:

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

【讨论】:

  • 谢谢,很容易理解。
猜你喜欢
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
相关资源
最近更新 更多