2017-07-17 137 views
3

我從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:0012/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 

誰能幫我糾正我的問題,還是有什麼功能可以幫我完成我的任務嗎?任何幫助是極大的讚賞!

+2

轉換timestamp列如'歐元兌美元[ '時間戳'] = pd.to_datetime(EURUSD [ '時間戳'])'和解決方案會奏效。 – shivsn

+0

或對read_csv使用parse_dates = True –

回答

2

你需要確保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] 
1

您可以使用日期時間和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