Numpy广播乘法报错如何解决:DataFrame多列与单列相乘语法问题
问题解决方法
错误原因
报错核心是NumPy数组广播维度不匹配:你要相乘的两个数组形状分别为(11516015,4)(四列价格字段的二维数组)和(11516015,)(复权因子的一维数组),不符合NumPy广播规则,无法直接逐行对应相乘。
正确写法
推荐两种实现方式,均为矢量化运算,适配千万级数据量的性能要求:
方式1:Pandas原生运算(最简洁,无需额外处理维度)
直接使用Pandas的mul方法指定按行对齐运算即可:
df[['close', 'open', 'high', 'low']] = df[['close', 'open', 'high', 'low']].mul(df['adj_factor'], axis=0)
方式2:NumPy维度对齐实现
如果需要用NumPy实现,只需给复权因子的一维数组增加一个维度,让其形状变为(11516015, 1)即可符合广播规则:
import numpy as np df[['close', 'open', 'high', 'low']] = df[['close', 'open', 'high', 'low']].to_numpy() * df['adj_factor'].to_numpy()[:, np.newaxis]
也可以用reshape方法实现同样的维度调整效果:
df[['close', 'open', 'high', 'low']] = df[['close', 'open', 'high', 'low']].to_numpy() * df['adj_factor'].to_numpy().reshape(-1, 1)
内容的提问来源于stack exchange,提问作者jaried
相关产品推荐
相关产品推荐

