Цель : я собираюсь загружать данные из финансов Yahoo в pandas.DataFrame один раз в день и сохранять их в CSV-файле.Затем используйте этот csv в качестве источника в течение дня, таким образом (повторно) загружая его в pandas.DataFrame.
Issue : при использовании фрейма данных для загрузки yahoo я могу получить доступ кзначения с использованием msft[msft.index[0]]
, но при использовании (повторно) загруженного фрейма данных и выполнении ms[ms.index[0]]
он выдает KeyError: Timestamp ('2006-01-04 00:00:00') .
Вопрос : Несмотря на то, что я часами просиживал в Интернете, я не смог преодолеть эту проблему.Как я могу получить доступ к данным после (повторного) импорта данных?
Фрагмент кода
(Примечание: Yahoo Finance изменил свой API, поэтому пришлось искать работувокруг, чтобы снова запустить его. Я все равно включил его, чтобы предоставить вам работающий пример.)
import os
from datetime import datetime
import pandas as pd
from pandas_datareader import data #as pd_data_scraper
import fix_yahoo_finance as yf
yf.pdr_override()
# Define the instruments to download
tickers = ['MSFT']
# We would like all available data from 'YYYY-MM-DD' until 'YYYY-MM-DD'.
start_date = '2006-01-03'
end_date = '2018-05-14'
data_source = 'yahoo'
group_by = 'ticker'
# User pandas_reader.data.DataReader to load the desired data
panel_data = data.get_data_yahoo(tickers, group_by=group_by)
# Getting just the adjusted closing prices. This will return a Pandas DataFrame
# The index in this DataFrame is the major index of the panel_data.
close = panel_data['Close']
# Getting all weekdays between 01/01/2000 and 12/31/2016
all_weekdays = pd.date_range(start=start_date, end=end_date, freq='B')
# How do we align the existing prices in adj_close with our new set of dates?
# All we need to do is reindex close using all_weekdays as the new index
close = close.reindex(all_weekdays)
# Reindexing will insert missing values (NaN) for the dates that were not present
# in the original set. To cope with this, we can fill the missing by replacing them
# with the latest available price for each instrument.
msft = close.fillna(method='ffill')
# save scraped data
file_path = '~/data/scraped_data'
current = datetime.now().strftime('%Y%m%d')
data_path = os.path.join(file_path, current)
filename = os.path.join(data_path, 'data_dump_msft%s.csv' % current)
if not os.path.exists(data_path):
os.makedirs(data_path)
# export to csv
msft.to_csv(filename)
ms_dir = '~/data/scraped_data/20180519/data_dump_msft20180519.csv'
ms = pd.read_csv(ms_dir, index_col=0, parse_dates=True) # setting from the former from_csv function
# the following should print twice the same but the second throws a KeyError instead
print('msft[msft.index[0]]: %s' % msft[msft.index[0]])
print('ms[ms.index[0]]: %s' % ms[ms.index[0]]) # KeyError: Timestamp('2006-01-04 00:00:00')