计算并绘制中间价(Mid Price)与成交量加权中间价(VWMP)报错求助
问题解决:KeyError 错误修复及代码优化
错误原因
你遇到的KeyError: "None of [Float]...."是因为试图用数值数组(mid_price)索引DataFrame,但DataFrame仅支持通过列名或行标签索引,数值数组无法匹配任何列,因此抛出错误。
修正后的代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取CSV文件(替换为你的实际文件路径) nasdaq_1 = pd.read_csv(r'Path to csv') # 计算中间价,将结果存入DataFrame新列 nasdaq_1['mid_price'] = (nasdaq_1['Offer_Price'] + nasdaq_1['Bid_Price']) / 2 # 计算成交量加权中间价,存入新列 nasdaq_1['vwmp'] = (nasdaq_1['Bid_Price'] * nasdaq_1['Offer_Size'] + nasdaq_1['Offer_Price'] * nasdaq_1['Bid_Size']) / (nasdaq_1['Offer_Size'] + nasdaq_1['Bid_Size']) # 打印验证VWMP结果 print(nasdaq_1['vwmp']) # 绘制中间价走势图 plt.figure(figsize=(10,10)) plt.plot(nasdaq_1.index, nasdaq_1['mid_price']) plt.xlabel("Datetime") plt.ylabel("$ price") plt.title("Mid-price between bid and offer prices") plt.show() # 也可以直接使用pandas内置绘图方法 nasdaq_1['mid_price'].plot(figsize=(10,10), xlabel="Datetime", ylabel="$ price", title="Mid-price between bid and offer prices") plt.show()
关键优化点
- 删除无用的
np.array(nasdaq_1)代码,该行对后续操作无任何作用。 - 直接利用pandas Series运算计算指标,无需转换为numpy数组,代码更简洁高效。
- 将计算结果存入DataFrame新列(
mid_price、vwmp),绘图时通过列名字符串索引,彻底避免KeyError。
补充优化(可选)
若CSV中DateTime列未被识别为时间索引,可添加参数将其设为索引,方便时间序列分析:
nasdaq_1 = pd.read_csv(r'Path to csv', parse_dates=['DateTime'], index_col='DateTime')
设置后绘图时x轴会自动显示时间,无需再调用nasdaq_1.index。
内容的提问来源于stack exchange,提问作者veakin
相关产品推荐
相关产品推荐

