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

计算并绘制中间价(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:57:37