Я пытаюсь запустить скрипт на python, который извлекает данные о ценах из финансов Yahoo для S & P 500, как определено на странице википедии. Но почему-то в EVRG код выдает эту ошибку:
Traceback (последний вызов был последним): File
"/Usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py",
строка 3078, в get_loc
вернуть файл self._engine.get_loc (key) «pandas / _libs / index.pyx», строка 140, в файле pandas._libs.index.IndexEngine.get_loc
"pandas / _libs / index.pyx", строка 162, в
Файл pandas._libs.index.IndexEngine.get_loc
"pandas / _libs / hashtable_class_helper.pxi", строка 1492, в
Файл pandas._libs.hashtable.PyObjectHashTable.get_item
"pandas / _libs / hashtable_class_helper.pxi", строка 1500, в
pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 'Date'
Во время обработки вышеуказанного исключения произошло другое исключение:
Traceback (последний вызов был последним): файл "./python-for-finance-6.py",
строка 50, в
get_data_from_yahoo () Файл "./python-for-finance-6.py", строка 45, в get_data_from_yahoo
Файл df = web.DataReader (ticker.replace (".", "-"), 'yahoo', start, end)
"/Usr/local/lib/python3.7/site-packages/pandas_datareader/data.py",
строка 310, в DataReader
сессия = сессия) .read () файл "/usr/local/lib/python3.7/site-packages/pandas_datareader/base.py",
строка 210, в чтении
params = self._get_params (self.symbols)) Файл "/usr/local/lib/python3.7/site-packages/pandas_datareader/yahoo/daily.py",
строка 142, в _read_one_data
to_datetime (price ['Date'], unit = 's'). dt.date) Файл "/usr/local/lib/python3.7/site-packages/pandas/core/frame.py", строка
2688, в getitem
вернуть файл self._getitem_column (key) File "/usr/local/lib/python3.7/site-packages/pandas/core/frame.py", строка
2695, в _getitem_column
вернуть файл self._get_item_cache (key) File "/usr/local/lib/python3.7/site-packages/pandas/core/generic.py", строка
2489, в _get_item_cache
values = self._data.get (item) Файл "/usr/local/lib/python3.7/site-packages/pandas/core/internals.py",
линия 4115, в get
loc = self.items.get_loc (item) Файл "/usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py",
строка 3080, в get_loc
вернуть self._engine.get_loc (self._maybe_cast_indexer (key)) Файл "pandas / _libs / index.pyx", строка 140, в
Файл pandas._libs.index.IndexEngine.get_loc
"pandas / _libs / index.pyx", строка 162, в
Файл pandas._libs.index.IndexEngine.get_loc
"pandas / _libs / hashtable_class_helper.pxi", строка 1492, в
Файл pandas._libs.hashtable.PyObjectHashTable.get_item
"pandas / _libs / hashtable_class_helper.pxi", строка 1500, в
pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 'Date'
Может кто-нибудь помочь, пожалуйста ??
Мой код такой:
import bs4 as bs
import datetime as dt
import os
import pandas as pd
import pandas_datareader.data as web
import pickle
import requests
# This is a script that will get the tickers from the wikipedia list,
print them and save it as a pickle file
def save_sp500_tickers():
resp = requests.get('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
soup = bs.BeautifulSoup(resp.text, 'lxml')
table = soup.find('table', {'class': 'wikitable sortable'})
tickers= []
for row in table.findAll('tr')[1:]:
ticker=row.findAll('td')[0].text
mapping = str.maketrans(".","-")
ticker = ticker.translate(mapping)
if ticker.find("_"):
ticker = ticker.replace("_","-")
tickers.append(ticker)
with open("sp500tickers.pickle", "wb") as f:
pickle.dump(tickers, f)
print(tickers)
return tickers
save_sp500_tickers()
def get_data_from_yahoo(reload_sp500 = False):
if reload_sp500:
tickers = save_sp500_tickers()
else:
with open("sp500tickers.pickle", "rb") as f:
tickers = pickle.load(f)
if not os.path.exists('stock_dfs'):
os.makedirs('stock_dfs')
start = dt.datetime(2000,1,1)
end = dt.datetime(2017,12,31)
for ticker in tickers:
print(ticker)
if not os.path.exists('stock_dfs/{}.csv'.format(ticker)):
df = web.DataReader(ticker.replace(".","-"), 'yahoo', start, end)
df.to_csv('stock_dfs/{}.csv'.format(ticker))
else:
print('Already have {}'.format(ticker))
get_data_from_yahoo()