使用 pandas 数据帧和组合条件会产生歧义错误



我正在尝试计算名为 Doji 的烛台形态。它需要两个条件的两次计算 值是一个熊猫数据帧,其中包含历史股票数据,列包括日期、最高价、最低价、开盘价和收盘价。

使用 if 条件,我尝试显式创建条件 1 和条件 2 布尔值,并通过使用 any(( 进行类型转换来尝试它。他们都没有给出预期的结果。打印条件 1 和条件 2 分别给出适当的布尔值,但将其与"&"组合会出现可怕的错误。

51315    True
51316    True
51317    True
51318    True
51319    True
... 
53790    True
53791    True
53792    True
53793    True
53794    True
Length: 2480, dtype: bool

ValueError                                Traceback (most recent call last)
<ipython-input-58-3f42eed169f4> in <module>
4 values = pd.DataFrame(stocks_data.loc[stocks_data['Company']=='TCS'])
5 values.reset_index()
----> 6 study_candlesticks(values)
<ipython-input-57-fd67b4117699> in study_candlesticks(values)
21 #     for row in values
22 
---> 23     if calc_doji(values):
24         values['Pattern']='Doji'
25 
<ipython-input-57-fd67b4117699> in calc_doji(values)
81     condition2=((values['High'] - values['Low'])>values['Close']*min_candle_size)
82     print(condition2)
---> 83     if ((condition1).bool()&(condition2).any()):
84         return True
85     else:
~Anaconda3libsite-packagespandascoregeneric.py in bool(self)
1581             )
1582 
-> 1583         self.__nonzero__()
1584 
1585     def __abs__(self):
~Anaconda3libsite-packagespandascoregeneric.py in __nonzero__(self)
1553             "The truth value of a {0} is ambiguous. "
1554             "Use a.empty, a.bool(), a.item(), a.any() or a.all().".format(
-> 1555                 self.__class__.__name__
1556             )
1557         )

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

我不确定我哪里出错了。有什么建议吗?

下面是代码

calc_doji(values)
def calc_doji(values):
max_candle_size=0.1/100
min_candle_size=1/100
condition1 =(abs(values['Open'] - values['Close'])<values['Close']*max_candle_size)
print(condition1)
condition2=((values['High'] - values['Low'])>values['Close']*min_candle_size)
print(condition2)
if ((condition1).bool()&(condition2).any()): 
return True
else:
return False

如果你有两个pd.Series,其中dtype('bool').您可以通过以下方式比较它们。在不知道您的数据是什么样子的情况下,我创建了两个pd.Series,其中TrueFalse

import pandas as pd
import numpy as np
condition1= pd.Series(np.random.choice([True, False], 100)) 
condition2= pd.Series(np.random.choice([True, False], 100)) 

然后,您可以通过执行以下操作进行比较。

(condition1) & (condition2) # which returns a `pd.Series` where each row is either `True` or `False`.

要查找两个值都True的每个pd.Series中的任何索引位置。

((condition1) & (condition2)).any() # Which returns either `True` or `False`

从您的代码中,我猜这一行是问题所在。

if ((condition1).bool()&(condition2).any()):

应该是

if ((condition1) & (condition2)).any():

相关内容

  • 没有找到相关文章

最新更新