创建DataFrame后设置pandas DatetimeIndex的频率

时间:2017-01-08 17:03:37

标签: python pandas

我正在使用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等进行导航。

我发现的是两个函数astyperesample。由于我已经知道freq resample看起来有点矫枉过正,我只想将freq设置为每日。

现在我的问题是如何在ABB上使用astype将freq设置为每日?

3 个答案:

答案 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的频率,则需要meansum等某些功能的汇总列:

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