【发布时间】:2021-04-15 12:06:49
【问题描述】:
我有一个 pandas 数据框和一个旧例程,它正在通过迭代槽线进行评估,我想加快它的速度,我已经开始在 pandas 列上使用过滤器而不是迭代,我遇到了一个奇怪的行为:
这是原始代码(在一个 for 循环中,该循环遍历传递给函数的数据帧的所有行)。
if (float(_data['MACD'][index_value] - _data['MACD SIGNAL'][index_value]) > float(0)) >= float(_data['MACD'][index_value - 1] - _data['MACD SIGNAL'][index_value - 1]):
gauge_value += 1
这是我的新代码
_data['MACD_SIGNAL_DIFF']=_data['MACD']-_data['MACD SIGNAL']
_data.loc[(_data['MACD_SIGNAL_DIFF']>0.0) & (_data['MACD_SIGNAL_DIFF+1']<=0.0,'Gauge']+=1
我注意到这两个例程为仪表值提供了不同的值,我做了一些研究,结果发现浮点转换完全搞砸了,这是我的发现:
index_value=10
(float(df['MACD'][index_value] - df['MACD SIGNAL'][index_value]) > float(0)) >= float(df['MACD'][index_value - 1] - df['MACD SIGNAL'][index_value - 1])
Out[32]: True
df['MACD'][index_value]-df['MACD SIGNAL'][index_value]
Out[35]: 1.4002172909618273e-06
df['MACD'][index_value-1]-df['MACD SIGNAL'][index_value-1]
Out[36]: 3.53445505941293e-07
1.4002172909618273e-06>0>3.53445505941293e-07
Out[37]: False
df['MACD'][index_value]-df['MACD SIGNAL'][index_value]>0>df['MACD'][index_value-1]-df['MACD SIGNAL'][index_value-1]
Out[38]: False
(float(df['MACD'][index_value] - df['MACD SIGNAL'][index_value]) > float(0)) >= float(df['MACD'][index_value - 1] - df['MACD SIGNAL'][index_value - 1])
Out[39]: True
如您所见,如果我强制从 numpy.float64 转换为浮动,则表达式的评估结果是错误的,正如您从上面的控制台行中看到的那样。
感谢任何帮助,因为旧代码给出了错误的值。
【问题讨论】: