【问题标题】:Python - Subset data between two datetimePython - 两个日期时间之间的子集数据
【发布时间】:2017-01-31 03:11:37
【问题描述】:

我正在尝试对数据集进行子集化以包含两个日期之间的行。但是,当我使用此功能时:

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]

有什么想法吗?

【问题讨论】:

    标签: python pandas datetime subset


    【解决方案1】:

    这似乎作为评论会更好,但我没有其中之一的代表。从您提供的示例数据中,空数据框是正确的结果。所提供的日期都不属于您的搜索范围。如果您要将结束日期更改为 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]
    

    【讨论】:

    • 我提供的数据只有前5行
    • 您确定您提供的日期范围在您的数据集中是非空的吗?你设置的条件对我有用。
    • 我应该在我的帖子中更清楚。我将他帖子中的结束日期从 2016-09-30 更改为 2017-01-01,以表明它会返回一些东西。
    • rtk22 是对的。我仔细检查了我的结果并得到了相同的结果。我发布了另一个我遇到的答案。
    【解决方案2】:

    有效的使用方式是

    • 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,因为它已被弃用

    【讨论】:

      【解决方案3】:

      下面的代码也可以:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多