一个特殊的问题,当if条件遇到代码崩溃时,这段代码出了什么问题。 这是不在python中的原始代码,而是将其转换为python代码
efratio=noise!=0 ? signal/noise : 1
stockdata
的背景只是pandas数组中的数据帧值。当我将它与Python中的!=0
进行比较时,数组列表有噪音值我不知道程序崩溃的原因。
我应该在这里使用numpy,因为这个数据帧有数据系列列表吗?
if (stockdata['noise']!= 0):
stockdata['efratio']= (stockdata['signal']/stockdata['noise'])
else :
stockdata['efratio']= 1
or
stockdata['efratio']= (stockdata['signal']/stockdata['noise']) if (stockdata['noise']!= 0) else 1
EDIT1: 例外是
系列的真值是模棱两可的。使用a.empty,a.bool(), a.item(),a.any()或a.all()
答案 0 :(得分:1)
更改:
if (stockdata['noise']!= 0):
stockdata['efratio']= (stockdata['signal']/stockdata['noise'])
else :
stockdata['efratio']= 1
为:
import numpy as np
stockdata['efratio'] = np.where(stockdata['noise'] != 0,
stockdata['signal'] / stockdata['noise'], 1)
这会发生什么:
where(condition, [x, y])
从
x
或y
返回元素,具体取决于condition
。
答案 1 :(得分:0)
也许是这样的:
import pandas as pd
stockdata = pd.DataFrame({'noise': [10, 4, 0], 'signal': [1, 2, 3]})
logic = stockdata['noise'] != 0
stockdata['efratio'] = 1.0
stockdata['efratio'][logic] = stockdata['signal'][logic] / (stockdata['noise'][logic])