Python:pandas数据读取器->;plotly candelstick graph无法识别tiingo stock data api导入的日期列
任务是通过pandas data_reader从tiingo api导入特定日期范围内的股票数据,然后将其绘制成蜡烛棒图。这种导入是有效的。但是,绘图未将“日期”识别为x轴变量。请参阅末尾的错误消息 代码: 错误消息: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
---------------------------------------------------------------------------
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的多索引,所以我不确定它是否会像您描述的那样工作。我稍后会测试。我很高兴我也能帮助你。请接受我的回答。