Я использую 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]]

Если freq не установлен на DatetimeIndex, я не могу использовать +1 и т. Д. Для навигации.

Я нашел две функции astype и resample. Поскольку я уже знаю, что freq resample выглядит излишним, я просто хочу установить freq на daily.

Теперь мой вопрос: как я могу использовать astype на ABB, чтобы установить freq на daily?

22
user3139545 8 Янв 2017 в 20:03

3 ответа

Лучший ответ

Пытаться:

ABB = ABB.asfreq('d')

Это должно изменить частоту на ежедневную с NaN для дней без данных.

Кроме того, вы должны переписать ваш for-loop следующим образом:

for index, row in ABB.iterrows():
    print(ABB.loc[[index + pd.Timedelta(days = 1)]])

Спасибо!

17
Abdou 8 Янв 2017 в 19:30

При необходимости измените частоту индекса 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
1
jezrael 8 Янв 2017 в 18:20

ABB - это pandas DataFrame, тип index которого равен DatetimeIndex .

DatetimeIndex имеет атрибут freq , который можно установить следующим образом

ABB.index.freq = 'd'

Проверьте изменения

ABB.index
1
Rohit Nandi 28 Мар 2020 в 16:06