Python 从数据帧获取给定日期的数据

Python 从数据帧获取给定日期的数据,python,python-3.x,pandas,datetime,Python,Python 3.x,Pandas,Datetime,我有一个数据帧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-0

我有一个数据帧
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')]
使用,但首先需要
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
另一种解决方案是通过以下方式将日期时间转换为字符串:

使用,但首先需要
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
另一种解决方案是通过以下方式将日期时间转换为字符串:


另一种选择是创建遮罩:

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)]

另一种选择是创建遮罩:

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)]

呵呵,不错,但现在你复制了我的解决方案(虽然我知道你在现实中没有!)@AntonvBR-别担心,只是原理相同,但解决方案不同:)呵呵,不错,但现在你复制了我的解决方案(虽然我知道你在现实中没有!)@AntonvBR-别担心,只有原理相同,但解决方案不同:)