mplfinance报错TypeError: Expect data.index as DatetimeIndex,求解决方法
排查与解决建议
一、先确认索引的实际类型
先在代码里加两行排查代码,看看pandas有没有真的把索引解析成DatetimeIndex:
print(type(data.index)) print(data.index[:5]) # 输出前5个索引值,看格式是否正确
如果输出不是pandas.core.indexes.datetimes.DatetimeIndex,那问题就出在日期索引的解析上。
二、针对性修复索引解析问题
1. 手动指定日期格式
有时候csv里的日期格式比较特殊,pandas自动解析会失败,你可以手动指定格式(把下面的格式字符串改成你数据里的实际格式):
data = pd.read_csv( "AUDCAD.csv", header=0, index_col=0, sep=",", parse_dates=True, date_parser=lambda x: pd.to_datetime(x, format="%Y-%m-%d %H:%M:%S") )
如果你的日期是日在前的格式(比如DD/MM/YYYY),可以加个dayfirst=True参数替代手动格式:
data = pd.read_csv( "AUDCAD.csv", header=0, index_col=0, sep=",", parse_dates=True, dayfirst=True )
2. 确认索引列是否正确
如果csv里的日期列不是第一列,index_col=0就指定错了。比如日期列的列名叫datetime,改成用列名指定:
data = pd.read_csv( "AUDCAD.csv", header=0, index_col="datetime", # 替换成你数据里的日期列名 sep=",", parse_dates=True )
3. 处理无效日期值
如果数据里存在格式错误的日期,会导致解析失败。可以先读取所有数据,单独处理日期列:
# 先不设置索引,读取全量数据 data = pd.read_csv("AUDCAD.csv", header=0, sep=",") # 解析日期列,errors='coerce'会把无效值转为NaT data["datetime"] = pd.to_datetime(data["datetime"], format="%Y-%m-%d %H:%M:%S", errors="coerce") # 查看哪些行是无效日期 print(data[data["datetime"].isna()]) # 删除无效行后设置索引 data = data.dropna(subset=["datetime"]).set_index("datetime")
三、验证修复结果
处理完后,再打印索引类型确认:
print(type(data.index))
如果输出是DatetimeIndex,再运行mpf.plot(data, type='candle')就应该能正常生成K线图了。
内容的提问来源于stack exchange,提问作者dbmtbm
相关产品推荐
相关产品推荐

