Python - 两个日期时间

时间:2017-01-31 03:11:37

标签: python pandas datetime subset

我尝试将数据集子集以包含两个日期之间的行。但是,当我这个功能:

data_norm[(data_norm['publication_date'] > '2016-09-01') & (data_norm['publication_date'] <= '2016-09-30')]

我明白了:

Empty DataFrame
Columns: [categories, company, contents, id, levels, locations, model_type, name, publication_date, refs, short_name, tags, type]
Index: []

我的猜测是我的子集函数中的日期与数据不同。这是数据:

0   2017-01-30 21:28:12.102749
1   2017-01-30 21:24:32.670365
2   2016-12-29 18:56:37.000000
3   2017-01-13 12:10:55.000000
4   2017-01-30 21:28:33.180670
Name: publication_date, dtype: datetime64[ns]

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

这似乎更适合作为评论,但我没有其中一个的代表。根据您提供的示例数据,空数据帧是正确的结果。所提供的日期均不属于您的搜索范围。如果您要将结束日期更改为2017-01-01 ...

data_norm[(data_norm['publication_date'] > '2016-09-01') &
          (data_norm['publication_date'] <= '2017-01-01')]

它应该返回

2016-12-29 18:56:37.000000
Name: publication_date, dtype: datetime64[ns]

答案 1 :(得分:0)

以下代码也有效:

data_norm.ix[(data_norm.publication_date >= '2016-09-01') & (data_norm.publication_data <= '2017-01-01'), : ]

答案 2 :(得分:0)

有效的使用方式是

  • df是数据框名称
  • date_column是具有dtypes作为Date的列名。
  • 两个日期之间的子设置

  • ilocloc用于无错误代码

df = df.loc[(df['date_column'] > '2012-08-25') & (df['date_column'] <= '2014-06-24')]
df = df.loc[(df['date_column'] > '2014-06-25') & (df['date_column'] <= '2014-09-25')]

请勿使用已弃用的ix