熊猫读取特定的日期和时间范围CSV数据帧行
问题描述:
我从CSV文件中的数据帧如下,熊猫读取特定的日期和时间范围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
从一个特定的日期和时间范围,例如读取数据,从11/7/2017 8:00
到12/7/2017 8:00
。
我试过使用Boolean mask
,DatetimeIndex
和.Between
方法,它也读取了该范围以外的数据,并且从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'])
或使用.between,
eurusd = eurusd[eurusd['TimeStamp'].between('11/7/2017 8:00', '12/7/2017 8: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
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
谁能帮我纠正我的问题,还是有什么功能可以帮我完成我的任务吗?任何帮助是极大的赞赏!
答
你需要确保eurusd['TimeStamp']
是一系列具有D型datetime64[ns]
:
eurusd['TimeStamp'] = pd.to_datetime(eurusd['TimeStamp'])
创建布尔型面膜:
mask = (eurusd['TimeStamp'] > start_date) & (eurusd['TimeStamp'] <= end_date)
现在,重新分配(或任何你wa NT与输出做):
eurusd = eurusd.loc[mask]
答
您可以使用日期时间和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
转换timestamp列如'欧元兑美元[ '时间戳'] = pd.to_datetime(EURUSD [ '时间戳'])'和解决方案会奏效。 – shivsn
或对read_csv使用parse_dates = True –