【问题标题】:Getting data for given day from pandas Dataframe从 pandas Dataframe 获取给定日期的数据
【发布时间】:2018-05-17 14:32:14
【问题描述】:

我有一个数据框df 如下:

date1               item_id
2000-01-01 00:00:00    0
2000-01-01 10:01:00    1
2000-01-01 00:02:00    2
2000-01-01 00:03:00    3
2000-01-01 00:04:00    4
2000-01-01 00:05:00    5
2000-01-01 00:06:00    6
2000-01-01 12:07:00    7
2000-01-02 00:08:00    8
2000-01-02 00:00:00    0
2000-01-02 00:01:00    1
2000-01-02 03:02:00    2
2000-01-02 00:03:00    3
2000-01-02 00:04:00    4
2000-01-02 00:05:00    5
2000-01-02 04:06:00    6
2000-01-02 00:07:00    7
2000-01-02 00:08:00    8

我需要一天的数据,即 2000 年 1 月 1 日。下面的查询给了我正确的结果。但是有没有办法只通过“2000-01-01”就可以做到?

result= df[(df['date1'] > '2000-01-01 00:00') & (df['date1'] < '2000-01-01 23:59')]

【问题讨论】:

    标签: python python-3.x pandas datetime


    【解决方案1】:

    使用partial string indexing,但首先需要DatetimeIndex

    df = df.set_index('date1')['2000-01-01']
    print (df)
                         item_id
    date1                       
    2000-01-01 00:00:00        0
    2000-01-01 10:01:00        1
    2000-01-01 00:02:00        2
    2000-01-01 00:03:00        3
    2000-01-01 00:04:00        4
    2000-01-01 00:05:00        5
    2000-01-01 00:06:00        6
    2000-01-01 12:07:00        7
    

    另一种解决方案是通过strftime 将日期时间转换为字符串并通过boolean indexing 过滤:

    df = df[df['date1'].dt.strftime('%Y-%m-%d') == '2000-01-01']
    print (df)
                    date1  item_id
    0 2000-01-01 00:00:00        0
    1 2000-01-01 10:01:00        1
    2 2000-01-01 00:02:00        2
    3 2000-01-01 00:03:00        3
    4 2000-01-01 00:04:00        4
    5 2000-01-01 00:05:00        5
    6 2000-01-01 00:06:00        6
    7 2000-01-01 12:07:00        7
    

    【讨论】:

    • 呵呵很好,但现在你复制了我的解决方案(虽然我知道你实际上没有!)
    • @AntonvBR - 别担心,只是原理相同,但解决方案不同:)
    【解决方案2】:

    另一种选择是创建一个掩码:

    df[df.date1.dt.date.astype(str) == '2000-01-01']
    

    完整示例:

    import pandas as pd
    
    data = '''\
    date1                  item_id
    2000-01-01T00:00:00    0
    2000-01-01T10:01:00    1
    2000-01-01T00:02:00    2
    2000-01-01T00:03:00    3
    2000-01-01T00:04:00    4
    2000-01-01T00:05:00    5
    2000-01-01T00:06:00    6
    2000-01-01T12:07:00    7
    2000-01-02T00:08:00    8
    2000-01-02T00:00:00    0
    2000-01-02T00:01:00    1
    2000-01-02T03:02:00    2'''
    
    df = pd.read_csv(pd.compat.StringIO(data), sep='\s+', parse_dates=['date1'])
    
    res = df[df.date1.dt.date.astype(str) == '2000-01-01']
    print(res)
    

    返回:

                    date1  item_id
    0 2000-01-01 00:00:00        0
    1 2000-01-01 10:01:00        1
    2 2000-01-01 00:02:00        2
    3 2000-01-01 00:03:00        3
    4 2000-01-01 00:04:00        4
    5 2000-01-01 00:05:00        5
    6 2000-01-01 00:06:00        6
    7 2000-01-01 12:07:00        7
    

    或者

    import datetime
    df[df.date1.dt.date == datetime.date(2000,1,1)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2017-07-19
      相关资源
      最近更新 更多