You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 11:29:30