Python pandas 在 if 条件下:崩溃未知

Python pandas in if conditions: crash unknown

一个特殊的问题,这段代码有什么问题,当 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

编辑 1: 例外是

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

可能是这样的:

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

变化:

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

Return elements, either from x or y, depending on condition.