尝试获取Yahoo Finance数据并将其设置为数据框时出现错误

时间:2019-07-18 17:22:01

标签: python python-3.x jupyter-notebook jupyter keyerror

当我尝试获取雅虎财务数据并将其设置为数据框的循环时,出现KeyError:Date。从 future 导入部门运行时,我也遇到了问题。谁能帮忙。

import pandas as pd
from pandas import Series,DataFrame
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
%matplotlib inline

from pandas_datareader import data

from datetime import datetime

tech_list = ['APPL','GOOG','MSFT','AMZN']

end = datetime.now()

start = datetime(end.year -1, end.month, end.day)
for stock in tech_list:
    globals()[stock] = data.DataReader(stock,'yahoo',start,end)

当我从未来导入部门输入内容时,出现错误

File "<ipython-input-19-69af1e1068cd>", line 4
SyntaxError: from __future__ imports must occur at the beginning of the file

当我键入for循环以获取Yahoo财务数据并将其设置为数据框

for stock in tech_list:
    globals()[stock] = data.DataReader(stock,'yahoo',start,end)

我收到此错误

KeyError                                  Traceback (most recent call last)
F:\Anaconda3\Anaconda\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2656             try:
-> 2657                 return self._engine.get_loc(key)
   2658             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'Date'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-23-6054597c5f52> in <module>
      1 for stock in tech_list:
----> 2     globals()[stock] = data.DataReader(stock,'yahoo',start,end)

F:\Anaconda3\Anaconda\lib\site-packages\pandas_datareader\data.py in DataReader(name, data_source, start, end, retry_count, pause, session, access_key)
    308                                 adjust_price=False, chunksize=25,
    309                                 retry_count=retry_count, pause=pause,
--> 310                                 session=session).read()
    311 
    312     elif data_source == "google":

F:\Anaconda3\Anaconda\lib\site-packages\pandas_datareader\base.py in read(self)
    208         if isinstance(self.symbols, (compat.string_types, int)):
    209             df = self._read_one_data(self.url,
--> 210                                      params=self._get_params(self.symbols))
    211         # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])
    212         elif isinstance(self.symbols, DataFrame):

F:\Anaconda3\Anaconda\lib\site-packages\pandas_datareader\yahoo\daily.py in _read_one_data(self, url, params)
    140         prices.columns = [col.capitalize() for col in prices.columns]
    141         prices['Date'] = to_datetime(
--> 142             to_datetime(prices['Date'], unit='s').dt.date)
    143 
    144         if 'Data' in prices.columns:

F:\Anaconda3\Anaconda\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2925             if self.columns.nlevels > 1:
   2926                 return self._getitem_multilevel(key)
-> 2927             indexer = self.columns.get_loc(key)
   2928             if is_integer(indexer):
   2929                 indexer = [indexer]

F:\Anaconda3\Anaconda\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2657                 return self._engine.get_loc(key)
   2658             except KeyError:
-> 2659                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2660         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2661         if indexer.ndim > 1 or indexer.size > 1:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'Date'

1 个答案:

答案 0 :(得分:1)

错误是因为您正在寻找错误的库存。对于苹果来说,它是AAPL,而不是APPL

import pandas as pd
from pandas_datareader import data
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style('whitegrid')
%matplotlib inline


tech_list = ['AAPL','GOOG','MSFT','AMZN']

end = datetime.now()
start = datetime(end.year -1, end.month, end.day)
stocks = {}

for stock in tech_list:
    #storing each dataframe in as a key value pair or else it will
    #overwrite the stock variable even if you define it as global var
    stocks[stock] = data.DataReader(stock,'yahoo',start,end)