Python:pandas数据读取器->;plotly candelstick graph无法识别tiingo stock data api导入的日期列

Python:pandas数据读取器->;plotly candelstick graph无法识别tiingo stock data api导入的日期列,python,pandas,plotly,tiingo,Python,Pandas,Plotly,Tiingo,任务是通过pandas data_reader从tiingo api导入特定日期范围内的股票数据,然后将其绘制成蜡烛棒图。这种导入是有效的。但是,绘图未将“日期”识别为x轴变量。请参阅末尾的错误消息 代码: 错误消息: --------------------------------------------------------------------------- KeyError Traceback (most re

任务是通过pandas data_reader从tiingo api导入特定日期范围内的股票数据,然后将其绘制成蜡烛棒图。这种导入是有效的。但是,绘图未将“日期”识别为x轴变量。请参阅末尾的错误消息

代码:

错误消息:

    ---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~\miniconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2894             try:
-> 2895                 return self._engine.get_loc(casted_key)
   2896             except KeyError as err:

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'

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
<ipython-input-5-e6052ae4135a> in <module>
----> 1 fig = go.Figure(data=[go.Candlestick(x=stock_df['date'],
      2                open=stock_df['open'],
      3                high=stock_df['high'],
      4                low=stock_df['low'],
      5                close=stock_df['close'])])

~\miniconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2900             if self.columns.nlevels > 1:
   2901                 return self._getitem_multilevel(key)
-> 2902             indexer = self.columns.get_loc(key)
   2903             if is_integer(indexer):
   2904                 indexer = [indexer]

~\miniconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2895                 return self._engine.get_loc(casted_key)
   2896             except KeyError as err:
-> 2897                 raise KeyError(key) from err
   2898 
   2899         if tolerance is not None:

KeyError: 'date'
显示:

Index(['close', 'high', 'low', 'open', 'volume', 'adjClose', 'adjHigh',
       'adjLow', 'adjOpen', 'adjVolume', 'divCash', 'splitFactor'],
      dtype='object')
MultiIndex([('TTWO', '2019-11-01 00:00:00+00:00'),
            ('TTWO', '2019-11-04 00:00:00+00:00'),
            ('TTWO', '2019-11-05 00:00:00+00:00'),
            ('TTWO', '2019-11-06 00:00:00+00:00'),
            ('TTWO', '2019-11-07 00:00:00+00:00'),
            ('TTWO', '2019-11-08 00:00:00+00:00'),
            ('TTWO', '2019-11-11 00:00:00+00:00'),
            ('TTWO', '2019-11-12 00:00:00+00:00'),
            ('TTWO', '2019-11-13 00:00:00+00:00'),
            ('TTWO', '2019-11-14 00:00:00+00:00'),
            ...
            ('TTWO', '2020-10-19 00:00:00+00:00'),
            ('TTWO', '2020-10-20 00:00:00+00:00'),
            ('TTWO', '2020-10-21 00:00:00+00:00'),
            ('TTWO', '2020-10-22 00:00:00+00:00'),
            ('TTWO', '2020-10-23 00:00:00+00:00'),
            ('TTWO', '2020-10-26 00:00:00+00:00'),
            ('TTWO', '2020-10-27 00:00:00+00:00'),
            ('TTWO', '2020-10-28 00:00:00+00:00'),
            ('TTWO', '2020-10-29 00:00:00+00:00'),
            ('TTWO', '2020-10-30 00:00:00+00:00')],
           names=['symbol', 'date'], length=252) 

输入

stock_df.columns
显示:

Index(['close', 'high', 'low', 'open', 'volume', 'adjClose', 'adjHigh',
       'adjLow', 'adjOpen', 'adjVolume', 'divCash', 'splitFactor'],
      dtype='object')
MultiIndex([('TTWO', '2019-11-01 00:00:00+00:00'),
            ('TTWO', '2019-11-04 00:00:00+00:00'),
            ('TTWO', '2019-11-05 00:00:00+00:00'),
            ('TTWO', '2019-11-06 00:00:00+00:00'),
            ('TTWO', '2019-11-07 00:00:00+00:00'),
            ('TTWO', '2019-11-08 00:00:00+00:00'),
            ('TTWO', '2019-11-11 00:00:00+00:00'),
            ('TTWO', '2019-11-12 00:00:00+00:00'),
            ('TTWO', '2019-11-13 00:00:00+00:00'),
            ('TTWO', '2019-11-14 00:00:00+00:00'),
            ...
            ('TTWO', '2020-10-19 00:00:00+00:00'),
            ('TTWO', '2020-10-20 00:00:00+00:00'),
            ('TTWO', '2020-10-21 00:00:00+00:00'),
            ('TTWO', '2020-10-22 00:00:00+00:00'),
            ('TTWO', '2020-10-23 00:00:00+00:00'),
            ('TTWO', '2020-10-26 00:00:00+00:00'),
            ('TTWO', '2020-10-27 00:00:00+00:00'),
            ('TTWO', '2020-10-28 00:00:00+00:00'),
            ('TTWO', '2020-10-29 00:00:00+00:00'),
            ('TTWO', '2020-10-30 00:00:00+00:00')],
           names=['symbol', 'date'], length=252) 
输入:

stock_df.index
显示:

Index(['close', 'high', 'low', 'open', 'volume', 'adjClose', 'adjHigh',
       'adjLow', 'adjOpen', 'adjVolume', 'divCash', 'splitFactor'],
      dtype='object')
MultiIndex([('TTWO', '2019-11-01 00:00:00+00:00'),
            ('TTWO', '2019-11-04 00:00:00+00:00'),
            ('TTWO', '2019-11-05 00:00:00+00:00'),
            ('TTWO', '2019-11-06 00:00:00+00:00'),
            ('TTWO', '2019-11-07 00:00:00+00:00'),
            ('TTWO', '2019-11-08 00:00:00+00:00'),
            ('TTWO', '2019-11-11 00:00:00+00:00'),
            ('TTWO', '2019-11-12 00:00:00+00:00'),
            ('TTWO', '2019-11-13 00:00:00+00:00'),
            ('TTWO', '2019-11-14 00:00:00+00:00'),
            ...
            ('TTWO', '2020-10-19 00:00:00+00:00'),
            ('TTWO', '2020-10-20 00:00:00+00:00'),
            ('TTWO', '2020-10-21 00:00:00+00:00'),
            ('TTWO', '2020-10-22 00:00:00+00:00'),
            ('TTWO', '2020-10-23 00:00:00+00:00'),
            ('TTWO', '2020-10-26 00:00:00+00:00'),
            ('TTWO', '2020-10-27 00:00:00+00:00'),
            ('TTWO', '2020-10-28 00:00:00+00:00'),
            ('TTWO', '2020-10-29 00:00:00+00:00'),
            ('TTWO', '2020-10-30 00:00:00+00:00')],
           names=['symbol', 'date'], length=252) 

我在数据阅读器中从AlphaVantage的API获得的股票信息是按日期索引的。tiingo将是相同的,因此“日期”规范需要更正为
股票指数

stock_df
            open    high    low     close   volume
2019-11-01  121.28  121.740     116.800     116.90  1984390
2019-11-04  118.27  118.400     116.620     117.20  1692870
2019-11-05  117.99  118.480     116.220     117.25  1492332
2019-11-06  116.99  117.710     115.310     116.68  1491648
2019-11-07  117.86  118.410     115.450     116.91  2795812
....

fig = go.Figure(data=[go.Candlestick(x=stock_df.index,
               open=stock_df['open'],
               high=stock_df['high'],
               low=stock_df['low'],
               close=stock_df['close'])])

多亏@r-初学者提供的选项,我找到了解决方案。 要调用多索引中的列,我的问题的正确代码是:

.index.get_level_values
包括在绘制烛台图的代码中,错误消息被消除: 烛台图的更正代码:

fig = go.Figure(data=[go.Candlestick(x=stock_df.index.get_level_values('date'),
               open=stock_df['open'],
               high=stock_df['high'],
               low=stock_df['low'],
               close=stock_df['close'])])

fig.show()

更详细的信息请参见

所需的tiingo api密钥是免费的,只需一个有效的电子邮件地址即可接收。我在一分钟前找到并使用了
股票重设指数(inplace=True)
。当我来到这里时,你也解决了我的问题。非常感谢。现在我再次看一下您的答案,TiingAPI使用了一个来自symbol和date的多索引,所以我不确定它是否会像您描述的那样工作。我稍后会测试。我很高兴我也能帮助你。请接受我的回答。