ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()不知道

2024-03-29 11:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧:

最后一个信号:

Unnamed: 0  coresym    Lots         open_orders    direction
0   0       AUDUSD     110.39       0.0             9.0
1   1       EURUSD     88.19        0.0             9.0
2   2       GBPUSD     -87.65       0.0             9.0

信号:

    coresym Lots    open_orders direction
0   AUDUSD  250.00  0.0         1.0
1   EURUSD  112.50  0.0         0.0
2   GBPUSD  -97.11  0.0         0.0

我想根据上一个信号更改信号的值:

if ((last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9) & (signal[signal['coresym']=='AUDUSD']['Lots'] >100)):
    signal[signal['coresym']=='AUDUSD']['direction'] = 9

我弄错了

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-36-0b88b27047e9> in <module>
----> 1 if ((last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9) & (signal[signal['coresym']=='AUDUSD']['Lots'] >100)):
      2     signal[signal['coresym']=='AUDUSD']['direction'] = 9

~\anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1327 
   1328     def __nonzero__(self):
-> 1329         raise ValueError(
   1330             f"The truth value of a {type(self).__name__} is ambiguous. "
   1331             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."

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

我试着调试自己:

last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9
0    True
Name: direction, dtype: bool
signal[signal['coresym']=='AUDUSD']['Lots'] >100
0    True
Name: Lots, dtype: bool
((last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9) & (signal[signal['coresym']=='AUDUSD']['Lots'] >100))
0    True
dtype: bool

我真的不明白为什么,我想其他人可能也有同样的问题,所以我把它贴在这里


Tags: selftruesignal信号openlastboolorders
1条回答
网友
1楼 · 发布于 2024-03-29 11:59:33

如果您从最终输出中注意到,在应用所有操作后,您会得到一个序列,因此您不能像这样获得其真值:

condition = ((last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9) & (signal[signal['coresym']=='AUDUSD']['Lots'] >100))
truth_value = bool(condition) # will give you the current error

因此,你的if陈述就有了问题。要克服它,请这样做

if condition.any():
    # your code

.any()对于包含单个True的序列(至少一个True足以使.any()计算为True),将计算为True。所以基本上是这样做的:

if ((last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9) & (signal[signal['coresym']=='AUDUSD']['Lots'] >100)).any():
    signal[signal['coresym']=='AUDUSD']['direction'] = 9

由于使用&后得到的序列只包含一个布尔值,因此也可以使用.bool()

((last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9) & (signal[signal['coresym']=='AUDUSD']['Lots'] >100)).bool()

相关问题 更多 >