我正在使用pandas datareader来获取股票数据。
import pandas as pd
import pandas_datareader.data as web
ABB = web.DataReader(name='ABB.ST',
data_source='yahoo',
start='2000-1-1')
但是,默认情况下,未在结果数据帧上设置freq。 我需要freq才能使用这样的索引导航:
for index, row in ABB.iterrows():
ABB.loc[[index + 1]]
如果未在DatetimeIndex上设置freq,则无法使用+1
等进行导航。
我发现的是两个函数astype
和resample
。由于我已经知道freq resample
看起来有点矫枉过正,我只想将freq设置为每日。
现在我的问题是如何在ABB上使用astype将freq设置为每日?
答案 0 :(得分:10)
尝试:
ABB = ABB.asfreq('d')
这应该将频率更改为每日NaN
,并且数天没有数据。
另外,您应该按如下方式重写for-loop
:
for index, row in ABB.iterrows():
print(ABB.loc[[index + pd.Timedelta(days = 1)]])
谢谢!
答案 1 :(得分:4)
ABB是pandas DataFrame,其索引类型为 DatetimeIndex 。
DatetimeIndex 具有 freq 属性,该属性可以如下设置
ABB.index.freq = 'd'
查看更改
ABB.index
答案 2 :(得分:1)
如果需要更改索引resample
的频率,则需要mean
或sum
等某些功能的汇总列:
print (ABB.resample('d').mean())
print (ABB.resample('d').sum())
如果需要选择另一行,请使用iloc
get_loc
来查找DatetimeIndex
中的值的位置:
print (ABB.iloc[ABB.index.get_loc('2001-05-09') + 1])
Open 188.00
High 192.00
Low 187.00
Close 191.00
Volume 764200.00
Adj Close 184.31
Name: 2001-05-10 00:00:00, dtype: float64