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