2017-01-18 125 views
1

Python新手在这里,但我有一些数据是日内的财务数据,可以回到2012年,所以它每天都有相同的小时数(每天同一交易时段),但只是不同的日期。我希望能够从数据中选择某些时间并检查相应的OHLC数据,然后对其进行一些分析。Python - 选择特定的时间范围熊猫

所以目前它是一个CSV文件,我做:

import pandas as pd 
data = pd.DataFrame.read_csv('data.csv') 

date = data['date'] 
op = data['open'] 
high = data['high'] 
low = data['low'] 
close = data['close'] 
volume = data['volume'] 

的事情是,日期列是在“DD/MM/YYYY 00:00:00”的格式作为一个字符串或其他什么,那么是否有可能仍然在某个时间之间进行选择,例如“09:00:00”和“10:00:00”之间?还是我必须将时间从日期中分离出来,并制作成自己的专栏?如果是这样,怎么样?

所以我相信大熊猫有一个between_time()函数,但似乎需要一个DataFrame,所以我怎样才能将它转换为DataFrame,然后我应该能够使用between_time函数来选择我想要的时间。另外,因为显然有成千上万天,所有这些都有自己的“xx:xx:xx”到“xx:xx:xx”,我希望从每一天中抽出相同的时间段,而不仅仅是第一批“xx:xx:xx”为“xx:xx:xx”,因为它可以使数据顺利下来,如果这样做合理的话。谢谢!!

+0

实际上日期格式是yyyy-mm-dd。我认为这是使它无法正常工作的原因。我已经完成了parse_dates = True和index_col = 0作为read_csv()的参数,但是当我尝试打印df.head()时它给了我一个KeyError:'date'。 – spergy

+0

我真正想要达到的是在我所需的时间段(07:00:00 - 08:00:00)内计算我所有数据每天的范围(高 - 低)。谁能帮忙?谢谢! – spergy

回答

2

考虑数据框df

from pandas_datareader import data 

df = data.get_data_yahoo('AAPL', start='2016-08-01', end='2016-08-03') 
df = df.asfreq('H').ffill() 

选项1
转换index到一系列然后dt.hour.isin

slc = df.index.to_series().dt.hour.isin([9, 10]) 
df.loc[slc] 

选项2
numpy广播

slc = (df.index.hour[:, None] == [9, 10]).any(1) 
df.loc[slc] 

enter image description here


回应置评

然后,为了得到每一天时隙内的范围内,使用resample + agg + np.ptp(峰峰值)

df.loc[slc].resample('D').agg(np.ptp) 
+0

我真正想要实现的是在我想要的时间段(07:00:00 - 08:00:00)内计算我所有数据上每天的范围(高 - 低)。谁能帮忙?谢谢! – spergy

+0

谢谢!是的,我知道对不起,不知道如何编辑我原来的帖子,只是看到了编辑选项,doh! :( – spergy