从Tiingo API取数绘制Plotly蜡烛图时Date列识别失败问题
解决Tiingo数据导入后Plotly蜡烛图KeyError: 'date'的问题
我一眼就看出问题所在了——Tiingo通过pandas_datareader返回的DataFrame用了['symbol', 'date']的多级索引(MultiIndex),而你在调用go.Candlestick的时候试图把date当作普通列来取,这自然会触发KeyError。
下面给你两种简单的解决方案:
方案1:重置索引,将date转为普通列
这是最直观的处理方式,直接把多级索引里的date提取成单独的列,后续调用就和普通DataFrame一样:
import os import pandas_datareader as dr import pandas as pd import plotly.graph_objects as go from datetime import datetime start = datetime(2019, 11, 1) end = datetime(2020, 10, 31) my_api_key = os.environ.get("TIINGO_API_KEY") # 获取数据后立刻重置索引,把date从索引转为列 stock_df = dr.get_data_tiingo('TTWO', start=start, end=end, api_key=my_api_key).reset_index() # 现在可以直接用stock_df['date']作为X轴了 fig = go.Figure(data=[go.Candlestick( x=stock_df['date'], open=stock_df['open'], high=stock_df['high'], low=stock_df['low'], close=stock_df['close'] )]) fig.show()
方案2:直接调用多级索引中的date值
如果你不想修改原始DataFrame的结构,可以直接从多级索引里提取date部分:
import os import pandas_datareader as dr import pandas as pd import plotly.graph_objects as go from datetime import datetime start = datetime(2019, 11, 1) end = datetime(2020, 10, 31) my_api_key = os.environ.get("TIINGO_API_KEY") stock_df = dr.get_data_tiingo('TTWO', start=start, end=end, api_key=my_api_key) # 从MultiIndex中直接提取date索引值 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默认用多级索引是为了方便处理多只股票的批量请求——当你同时拉取多个标的数据时,symbol和date的组合索引能清晰区分不同股票的记录。但单只股票的场景下,这个设计就容易让人误以为date是普通列,以后遇到类似API返回的结构,可以先通过print(stock_df.index)确认索引类型哦。
内容的提问来源于stack exchange,提问作者joao-pestana
相关产品推荐
相关产品推荐

