Ошибка при попытке скачать несколько данных
При попытке скачать котировки акций из списка txt, возникает ошибка:
AttributeError: 'DataFrame' object has no attribute 'minor_axis'
Как исправить правильно?
Файл к которому обращение происходит - просто .txt с записью:
GM
F
AAPL
import pandas as pd
import pandas_datareader.data as wb
tickers_fn = r'C:/Python/1.txt'
with open(tickers_fn) as f:
stocklist = f.read().splitlines()
p = wb.DataReader(stocklist, 'yahoo', '2019-01-01')
# show Panel axes...
#print(p.axes)
for ticker in p.minor_axis:
p.loc[:, :, ticker].dropna().to_csv('C:/Python/{}_data.csv'.format(ticker))
Ответы (1 шт):
Очевидно вы воспользовались кодом, который работал для достаточно старых версий pandas и pandas-datareader и который не работает сейчас, потому, что в старых версиях указанных библиотек использовался тип данных pandas.Panel, преднанзначенный для хранения 3D данных. В более поздних версиях Pandas разработчики решили отказаться от его поддержки и в современных версиях Pandas этого типа данных нет. Соответственно разработчики pandas-datareader вынуждены были изменить свою библиотеку, чтобы не использовать более не поддерживаемый тип данных. Теперь вместо использования устаревшего 3D Panel, в pandas-datareader используют pandas.DataFrame с multi-level columns.
Для современных версий pandas и pandas-datareader можно сделать так:
import pandas as pd
import pandas_datareader.data as wb
p = wb.DataReader(stocklist, 'yahoo', '2019-01-01').swaplevel(axis=1)
for name in p.columns.get_level_values(0).unique():
p[name].to_csv(fr"c:/temp/data_{name}.csv")