运行股票K线图绘制代码遇ValueError:预期5值仅获4值的解决方法
解决
candlestick_ohlc 抛出的 ValueError: not enough values to unpack (expected 5, got 4) 问题 嘿,这个报错的原因很明确——candlestick_ohlc函数要求输入的数据必须包含5个值的组合:日期(数值格式)、开盘价、最高价、最低价、收盘价,但你当前构造的df_ohlc只给了4列,函数找不到第5个值(日期),自然就报错了。
具体修正思路:
- 把原来作为索引的日期转为普通列,再将其转换成matplotlib能识别的数值格式
- 严格按照函数要求的顺序排列列:日期、开盘价、最高价、最低价、收盘价(这个顺序不能乱,函数是按固定顺序解析数据的)
修正后的完整代码:
import pandas as pd import pandas_datareader.data as web from matplotlib import style import matplotlib.pyplot as plt !pip install https://github.com/matplotlib/mpl_finance/archive/master.zip from mpl_finance import candlestick_ohlc import matplotlib.dates as mdates import datetime as dt style.use('ggplot') start = dt.datetime(1996,1,1) end = dt.datetime(2020,5,8) df = web.DataReader('TATAMOTORS.NS', 'yahoo', start, end) # 关键修正:构造符合函数要求的ohlc数据 df_ohlc = df.reset_index() # 将索引中的日期转为普通列 df_ohlc['Date'] = df_ohlc['Date'].map(mdates.date2num) # 把日期转换为matplotlib支持的数值格式 df_ohlc = df_ohlc[['Date', 'Open', 'High', 'Low', 'Close']] # 按函数要求的顺序排列列 df_volume = df['Volume'] ax1 = plt.subplot2grid((6,1), (0,0), rowspan=5, colspan=1) ax2 = plt.subplot2grid((6,1), (5,0), rowspan=1, colspan=1, sharex=ax1) ax1.xaxis_date() candlestick_ohlc(ax1, df_ohlc.values, width=2, colorup='g') ax2.fill_between(df_volume.index.map(mdates.date2num), df_volume.values, 0) plt.show()
简单复盘下问题根源:你之前把日期留在索引里,只提取了4个价格列,df_ohlc.values返回的是4列数组,而candlestick_ohlc每一行都要拆出5个值,所以就触发了not enough values to unpack的错误。现在把日期作为第一列加进去,就完全符合函数的输入要求啦。
内容的提问来源于stack exchange,提问作者Shubham Kumar
相关产品推荐
相关产品推荐

