使用mplfinance绘制K线图时出现“Column 'Open' NOT FOUND”错误的求助
使用mplfinance绘制K线图时出现“Column 'Open' NOT FOUND”错误的求助
从你提供的DataFrame输出和错误信息来看,问题的根源非常清晰——你的DataFrame存在多层列索引(MultiIndex),这才导致mplfinance无法识别单独的Open列。
问题分析
看你打印的DataFrame结果,最顶部有两行列名:第一行是Price,第二行是AMZN,而实际的价格列(Close/High/Low/Open)被嵌套在这个多层结构里。mplfinance要求输入的DataFrame必须是单层列索引,列名为Open/High/Low/Close(大小写敏感),所以它找不到符合要求的Open列,才会抛出这个错误。
这种多层索引通常是yfinance在特定返回格式下的产物,比如保留了多只股票的返回结构但你只下载了单只股票时,就会出现这种情况。
解决方法
你只需要把多层列索引扁平化,或者换一种方式获取单层索引的DataFrame即可,下面提供两种简单可行的方案:
方案1:扁平化现有DataFrame的列索引
在获取数据后,直接去掉多层索引的冗余层级,修改后的代码如下:
import pandas as pd import yfinance as yf import mplfinance as mpf df = yf.download('AMZN', start='2020-01-01', end='2025-07-31') # 检查并扁平化多层列索引 if isinstance(df.columns, pd.MultiIndex): # 去掉第二层(股票代码)的索引,保留第一层的指标列名 df = df.droplevel(1, axis=1) print(df.columns) # 验证:此时列名应该是['Close', 'High', 'Low', 'Open', 'Volume'] mpf.plot(df['2020-01-01':'2020-06-01'], type='candle', volume=True)
方案2:换用yfinance的Ticker接口获取数据
使用yf.Ticker的history方法,默认会返回单层列索引的DataFrame,更适合直接给mplfinance使用:
import pandas as pd import yfinance as yf import mplfinance as mpf # 用Ticker接口获取数据,自动返回单层列索引 ticker = yf.Ticker('AMZN') df = ticker.history(start='2020-01-01', end='2025-07-31') print(df.columns) # 列名通常为['Open', 'High', 'Low', 'Close', 'Volume', 'Dividends', 'Stock Splits'] mpf.plot(df['2020-01-01':'2020-06-01'], type='candle', volume=True)
验证步骤
修改代码后,先执行print(df.columns),如果输出是类似Index(['Open', 'High', 'Low', 'Close', 'Volume'], dtype='object')的单层索引,就说明问题已经解决,此时再运行mplfinance的绘图代码就能正常生成K线图了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

