ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 & [复制]

Posted

技术标签:

【中文标题】ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 & [复制]【英文标题】:ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). & [duplicate] 【发布时间】:2021-03-21 07:55:51 【问题描述】:

我有一个数据框“信号”:

    coresym open_orders direction
27  EURUSD  2.0         1.0
76  XAUUSD  2.0         9.0

因为我需要一些条件来设置我的“_exec_dict”,这是一个字典,告诉交易平台我的订单是什么?

for symbol in do_symbols:
    #close positon
    if ((signal['coresym']==symbol) & (signal['direction'] == 9)):
        _exec_dict['_action'] = 'CLOSE'
        _exec_dict['_symbol'] = symbol
        _exec_dict['_magic'] = symbols_magic_dic[symbol]
        _ret = self._execution._execute_(_exec_dict)
        print(' is traded'.format(symbol))

问题是我无法使用

if ((signal['coresym']==symbol) & (signal['direction'] == 9)):

进行条件判断。

进行测试:

if((signal['coresym']=='XAUUSD') & (signal['direction'] == 9)):
    print('ok')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-52-f0dcc93290aa> in <module>
----> 1 if((signal['coresym']=='XAUUSD') & (signal['direction'] == 9)):
      2     print('ok')

~\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1476 
   1477     def __nonzero__(self):
-> 1478         raise ValueError(
   1479             f"The truth value of a type(self).__name__ is ambiguous. "
   1480             "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().

有一些交替,

if signal[signal['coresym'] == 'XAUUSD']['direction'] == 9:
       print('ok')

结果是:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-49-67440d7a0b81> in <module>
----> 1 if signal[signal['coresym'] == 'XAUUSD']['direction'] == 9:
      2     print('ok')

~\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1476 
   1477     def __nonzero__(self):
-> 1478         raise ValueError(
   1479             f"The truth value of a type(self).__name__ is ambiguous. "
   1480             "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().

搜索后,点赞Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all() 我确实使用'&'。

【问题讨论】:

你想用这个if达到什么目的? 请问有什么更好的方法吗?因为我需要条件来告诉 _exec_dict 将被设置什么? 【参考方案1】:

&amp; 不是问题。

if((signal['coresym']=='XAUUSD') &amp; (signal['direction'] == 9)): print('ok')

你是否想说signal['coresym']所有元素等于XAUUSD并且所有signal['direction']的元素是否等于=9

或者你的意思是如果他们中有any

这是错误描述的歧义。

使用 all()any() 围绕您的 predcats。例如:

if((signal['coresym']=='XAUUSD').all() &amp; (signal['direction'] == 9).all()): print('ok')

【讨论】:

以上是关于ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 & [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将 Pandas 列传递给函数时出现“ValueError:Series 的真值不明确”

ValueError:在将 lambda 与 loc 一起使用时,Series 的真值不明确 [重复]

为啥我会收到 ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 & [复制]

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

If 语句,ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()