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



我有两个数据帧:

lastrongignal:

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

我想根据lastrongignal:更改信号的值

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
~anaconda3libsite-packagespandascoregeneric.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

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

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

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

对于包含单个True的序列的.any()(至少一个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()

相关内容

最新更新