我正试图从Yahoo!中提取数据用于分析的财务,当我想从CSV文件中读取而不是从Yahoo!下载时遇到问题每次我运行程序。
import pandas_datareader as pdr
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import datetime
def get(tickers, startdate, enddate):
def data(ticker):
return pdr.get_data_yahoo(ticker, start = startdate, end = enddate)
datas = map(data, tickers)
return(pd.concat(datas, keys = tickers, names = ['Ticker', 'Date']))
tickers = ['AAPL', 'MSFT', 'GOOG']
all_data = get(tickers, datetime.datetime(2006, 10,1), datetime.datetime(2018, 1, 7))
all_data.to_csv('data/alldata.csv')
#Open file
all_data_csv = pd.read_csv('data/alldata.csv', header = 0, index_col = 'Date', parse_dates = True)
daily_close = all_data[['Adj Close']].reset_index().pivot('Date', 'Ticker', 'Adj Close')
我遇到'daily_close'部分的问题。上面的代码可以正常使用直接来自网络的“all_data”。如何更改代码的底线,以便从我的csv文件中提取数据?我已经尝试了daily_close = all_data_csv[['Adj Close']].reset_index().pivot('Date', 'Ticker', 'Adj Close')
但是由于'Ticker'而导致KeyError。
csv数据采用以下格式,第一列包含所有代码:
答案 0 :(得分:1)
all_data_csv
的当前代码不会像all_data
那样有效。这是因为all_data
包含MultiIndex
,其中包含执行枢轴所需的所有信息。
但是,在all_data_csv
的情况下,唯一的索引是Date
。因此,我们需要做一些额外的工作才能使其发挥作用。
Date
索引['Date', 'Ticker', 'Adj Close']
c = ['Date', 'Ticker', 'Adj Close']
daily_close = all_data_csv.reset_index('Date')[c].pivot(*c)
daily_close.head()
Ticker AAPL GOOG MSFT
Date
2006-10-02 9.586717 199.422943 20.971155
2006-10-03 9.486828 200.714539 20.978823
2006-10-04 9.653308 206.506866 21.415722
2006-10-05 9.582876 204.574448 21.400393
2006-10-06 9.504756 208.891357 21.362070