读取CSV绘制Candlestick Chart时触发KeyError:0的修复方法
修复蜡烛图绘制的KeyError及数据格式问题
错误根源
- 使用
csv.DictReader读取CSV后,每行数据是字典,键为CSV列名(如"Date"、"Price"),而非数字索引,因此用d[0]、d[1]这类索引取值会触发KeyError。 - 价格类字段(
Open、High、Low、Price)是带千分位逗号的字符串,无法直接用于绘图,必须转换为数值类型。
修复步骤
- 用字典键名替代数字索引取值,蜡烛图要求的OHLC顺序为:日期、开盘价、最高价、最低价、收盘价,对应CSV列名是
Date、Open、High、Low、Price。 - 清理价格字符串中的逗号,转换为
float类型。 - 保持日期转换逻辑不变,
mdates.datestr2num可直接处理MM/DD/YYYY格式的日期字符串。
修复后的完整代码
import matplotlib.pyplot as plt from mplfinance.original_flavor import candlestick_ohlc import matplotlib.dates as mdates import csv file_path = 'data.csv' def clean_price(price_str): # 去掉价格字符串中的逗号,转换为float return float(price_str.replace(',', '')) def plot_candlestick(data): if len(data) > 100: data = data[-100:] fig, ax = plt.subplots() # 用字典键取值,同时处理价格格式 ohlc = [ ( mdates.datestr2num(d['Date']), clean_price(d['Open']), clean_price(d['High']), clean_price(d['Low']), clean_price(d['Price']) ) for d in data ] candlestick_ohlc(ax, ohlc, width=0.6, colorup='red', colordown='green') ax.xaxis_date() ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) plt.gcf().autofmt_xdate() plt.subplots_adjust(left=0.05, right=0.85, top=0.90, bottom=0.10) plt.show() with open(file_path, 'r') as file: reader = csv.DictReader(file) data_json = [row for row in reader] plot_candlestick(data_json)
内容的提问来源于stack exchange,提问作者user11553898
相关产品推荐
相关产品推荐

