Python条件下的pandas:崩溃未知

时间:2018-02-17 09:54:12

标签: python pandas logical-operators

一个特殊的问题,当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()

2 个答案:

答案 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])

     

xy返回元素,具体取决于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])