Python 熊猫从特定日期和时间范围读取csv数据帧行

Python 熊猫从特定日期和时间范围读取csv数据帧行,python,python-3.x,csv,pandas,Python,Python 3.x,Csv,Pandas,我有一个来自CSV文件的数据帧,如下所示 TimeStamp 0 12/7/2017 8:00 1 12/7/2017 7:00 2 12/7/2017 6:00 3 12/7/2017 5:00 4 12/7/2017 4:00 5 12/7/2017 3:00 6 12/7/2017 2:00 7 12/7/2017 1:00 8 12/7/2017

我有一个来自CSV文件的数据帧,如下所示

         TimeStamp
0        12/7/2017 8:00
1        12/7/2017 7:00
2        12/7/2017 6:00
3        12/7/2017 5:00
4        12/7/2017 4:00
5        12/7/2017 3:00
6        12/7/2017 2:00
7        12/7/2017 1:00
8        12/7/2017 0:00
9       11/7/2017 23:00
10      11/7/2017 22:00
...
9996     3/12/2015 6:00
9997     3/12/2015 5:00
9998     3/12/2015 4:00
9999     3/12/2015 3:00
Name: TimeStamp, Length: 10000, dtype: object
我试图使用
Pandas
读取特定日期和时间范围内的数据,例如从
2017年11月7日8:00
2017年12月7日8:00

我曾尝试在方法之间使用
布尔掩码
日期时间索引
。它读取了该范围之外的数据,以及2016年和2015年的数据。这是我的密码

import pandas as pd

eurusd = pd.read_csv('fxhistoricaldata_EURUSD_hour.csv')
eurusd = eurusd[(eurusd['TimeStamp'] >= '11/7/2017 8:00') & 
(eurusd['TimeStamp'] <= '12/7/2017 8:00')]

print(eurusd['TimeStamp'])
结果是,

2        12/7/2017 6:00
3        12/7/2017 5:00
4        12/7/2017 4:00
5        12/7/2017 3:00
6        12/7/2017 2:00
7        12/7/2017 1:00
8        12/7/2017 0:00
23       11/7/2017 9:00
24       11/7/2017 8:00
513     12/6/2017 23:00
514     12/6/2017 22:00
515     12/6/2017 21:00
516     12/6/2017 20:00
517     12/6/2017 19:00
518     12/6/2017 18:00
519     12/6/2017 17:00
520     12/6/2017 16:00
521     12/6/2017 15:00
522     12/6/2017 14:00
523     12/6/2017 13:00
524     12/6/2017 12:00
525     12/6/2017 11:00
         ...       
8827     12/2/2016 5:00
8828     12/2/2016 4:00
8829     12/2/2016 3:00
Name: TimeStamp, Length: 305, dtype: object

有人能帮我纠正我的问题吗,或者有什么功能可以帮助我完成任务吗?非常感谢您的帮助

您可以使用datetime和dateutil库执行此操作:

from dateutil import parser
from datetime import datetime

df['TimeStamp'] = df['TimeStamp'].apply(lambda x: parser.parse(x))

df[(df['TimeStamp'] < datetime(2017, 12, 7)) & (df['TimeStamp']> datetime(2015, 3, 12))] #or whichever dates you're looking for
来自dateutil导入解析器的

从日期时间导入日期时间
df['TimeStamp']=df['TimeStamp'].apply(lambda x:parser.parse(x))
df[(df['TimeStamp']datetime(2015,3,12))#或您正在寻找的任何日期

您需要确保
欧元['TimeStamp']
是一个数据类型为
datetime64[ns]
的系列:

eurusd['TimeStamp'] = pd.to_datetime(eurusd['TimeStamp'])
创建布尔掩码:

mask = (eurusd['TimeStamp'] > start_date) & (eurusd['TimeStamp'] <= end_date)

将时间戳列(如
eurusd['timestamp']=pd.)转换为_datetime(eurusd['timestamp'])
,您的解决方案将起作用。或者使用parse_dates=True进行读取
mask = (eurusd['TimeStamp'] > start_date) & (eurusd['TimeStamp'] <= end_date)
eurusd = eurusd.loc[mask]