mplfinance报错:Open列数据必须全为float/int,代码此前可正常运行
解决mplfinance报错"Data for column 'Open' must be ALL float or int"
这个报错通常是因为OHLC(Open/High/Low/Close)列中存在非数值类型数据,或是类型转换不彻底导致的。试试以下步骤排查修复:
第一步:检查数据状态
先打印数据类型和缺失值情况,定位问题根源:print(stock_data.dtypes) print(stock_data.isna().sum())如果发现Open列是
object类型,或存在大量缺失值,就对应处理。第二步:强制转换OHLC列类型并清理缺失值
直接对核心列做类型转换,同时删除含缺失值的行(或根据需求填充):# 选择OHLC列并强制转为float ohlc_cols = ['Open', 'High', 'Low', 'Close'] stock_data[ohlc_cols] = stock_data[ohlc_cols].astype(float) # 删除含缺失值的行 stock_data = stock_data.dropna(subset=ohlc_cols)第三步:确认索引有效性
确保索引是无重复的datetime类型:# 去重并重新设置索引 stock_data = stock_data.reset_index().drop_duplicates(subset='Date').set_index('Date') stock_data.index = pd.to_datetime(stock_data.index)完整修复后的代码
#!pip install mplfinance yfinance pandas import pandas as pd import yfinance as yf import mplfinance as mpf # 获取数据 symbol = "AAPL" start_date = "2022-01-01" end_date = "2022-12-31" stock_data = yf.download(symbol, start=start_date, end=end_date) # 处理数据类型和缺失值 ohlc_cols = ['Open', 'High', 'Low', 'Close'] stock_data[ohlc_cols] = stock_data[ohlc_cols].astype(float) stock_data = stock_data.dropna(subset=ohlc_cols) # 确保索引正确无重复 stock_data.index = pd.to_datetime(stock_data.index) stock_data = stock_data[~stock_data.index.duplicated(keep='first')] # 绘制K线图 mpf.plot(stock_data, type='candle', style='yahoo', title=f'{symbol} K线图')
如果上述步骤无效,也可能是yfinance版本更新导致的兼容性问题,可以尝试指定稳定版本安装:pip install yfinance==0.2.31。
内容的提问来源于stack exchange,提问作者E DD
相关产品推荐
相关产品推荐

