【问题标题】:Python - select certain time range pandasPython - 选择特定时间范围的熊猫
【发布时间】:2017-01-18 04:50:41
【问题描述】:

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

所以目前它是一个 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”?还是我必须将该时间位与日期分开并使其成为自己的列?如果是这样,怎么做?

所以我相信 pandas 有一个between_time() 函数,但这似乎需要一个 DataFrame,所以我怎样才能将它转换为 DataFrame,然后我应该能够使用 between_time 函数在我想要的时间之间进行选择。也因为显然有数千天,都有自己的“xx:xx:xx”到“xx:xx:xx”我想从每一天中提取我想要查看的同一时间段,而不仅仅是第一批“xx:xx:xx”到“xx:xx:xx”,因为它会沿着数据向下移动,如果这有意义的话。谢谢!!

【问题讨论】:

  • 其实日期格式是yyyy-mm-dd。我认为这是使它无法正常工作的原因。我已经完成了 parse_dates=True 和 index_col=0 作为 read_csv() 的参数,但是当我尝试打印 df.head() 时它给了我一个 KeyError: 'date'。
  • 我真正想要实现的是在我想要的时间段(07:00:00 - 08:00:00)内计算我所有数据的每一天的范围(高 - 低)。谁能帮忙?谢谢!

标签: python pandas time financial


【解决方案1】:

考虑数据框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]


回复评论

然后要获得每天该时间段内的范围,请使用 resample + agg + np.ptp(峰到峰)

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

【讨论】:

  • 我真正想要实现的是在我想要的时间段(07:00:00 - 08:00:00)内计算我所有数据的每一天的范围(高 - 低)。谁能帮忙?谢谢!
  • 谢谢!是的,我知道对不起,不知道如何编辑我的原始帖子,只是看到了编辑选项,doh! :(
猜你喜欢
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
相关资源
最近更新 更多