首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到导致"ValueError:包含多个元素的数组的真值不明确的数组。

找不到导致"ValueError:包含多个元素的数组的真值不明确的数组。
EN

Stack Overflow用户
提问于 2020-12-12 07:28:03
回答 3查看 115关注 0票数 0

我想做的是比较一下价值。如果所有语句都为真,则将该值分配给dataframe中的特定单元格。

这是我的代码:

代码语言:javascript
复制
if pd.isnull(ColValues)  or ColValues <  TPStartValue or ColValues > CndlHigh or ColValues < CndlLow or ColValues < PrevCndlHigh or ColValues < PrevCndlClose:
     ColNum += 1
else:
     DynamTPs.loc[TATicketNum,TimeColName] = TADF[DfName]['DateTime'].iloc[RowNum]

我的dataframe名称会更改,因此dataframe名称存储在TADF字典中。

我用print(type())检查了每个变量,没有一个是数组,而且都是唯一的。

此错误发生在此示例代码的第4行,即"DynamTPs.locTATicketNum,TimeColName = TADFDfName.ilocRowNum“。我不是在比较变量。我正在分配一个。因此,我认为错误不是在这一行代码中,而是发送给方法/函数的变量(在回溯中)。

我检查了这行中的每个变量。所有的值都是唯一和正确的(例如,DfName是一个值,TATicketNum --在dataframe中只有一个值,dataframe的值是‘DateTime’。.ilocRowNum在dataframe中只有一个值,RowNum是正确的,ColNum是正确的(如下面的示例所示)等等。

追踪结果是:

代码语言:javascript
复制
  File "C:\Users\Jonathan\OneDrive - Mazars in Oman\Trading\Systems\FibMatrix\Testing Trade Analysis\Python - RB Code\calculating dynamics v1-3-1.py", line 95, in FindDynamicTPSLs
    DynamTPs.loc[TATicketNum,TimeColName] = TADF[DfName]['DateTime'].iloc[RowNum]

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 670, in __setitem__
    iloc._setitem_with_indexer(indexer, value)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 1765, in _setitem_with_indexer
    isetter(loc, value)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 1676, in isetter
    ser = self.obj._ixs(loc, axis=1)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2844, in _ixs
    label = self.columns[i]

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\multi.py", line 1902, in __getitem__
    if level_codes[key] == -1:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

下面是TADFDfName示例(错误发生时的RowNum为28,ColNum为6,在此示例中标记为_1m_21):

代码语言:javascript
复制
    DateTime             Open   High    Low     Close   Vol _1m_21  _1m_34
27  2020-07-01 20:25:00 1.8059  1.806   1.8059  1.806   81  1.806   1.8054
28  2020-07-01 20:26:00 1.806   1.8061  1.8058  1.8059  140 1.8061  1.8055
29  2020-07-01 20:27:00 1.8058  1.8058  1.8056  1.8056  120 1.806   1.8055

我试图写入的DynamTP的示例是(要写入的TATicketNum为5650779;列名为‘DynamicTP-1泳道时间’):

代码语言:javascript
复制
        Dynamic TP-1 lane Time  Dynamic TP-1 lane Price  Dynamic TP-2 lane Time  Dynamic TP-2 lane Price                            
5650779   nan                        nan                      nan                  nan
5659605   nan                        nan                      nan                  nan                              

我很感激你的帮助!提前谢谢。

更新当我打印"DynamTPs.locTATicketNum,TimeColName“类型时,它说它是一个系列类。因为这是唯一的系列类型,我认为这可能会导致问题。

我不明白为什么它会返回一个系列。我下载了dataframe到excel,并验证只有一个与TATicketNum匹配的索引号和一个与"TimeColName“匹配的列标签。我已经打印了每个变量的类型,它们是整数和字符串。我还对loc[]进行了硬编码,以消除作为问题的变量。它仍然会给出同样的错误。

您可以在上面的示例数据中看到它是什么样的,而不是重复的。

我也从loc切换到iat,硬编码的df.iat0,0和df.iat0,1,然后这些值被正确地输入到DF中。

我还切换到了“DynamicTPs.locTATicketNum.at‘DynamicTP-1 lane Time”(硬编码字符串),它也不起作用。但是没有错误信息。

当我尝试

代码语言:javascript
复制
TimeColIndex = DynamTPs.columns.get_loc('Dynamic TP-1 lane Time')

这应该是给我一个整数,但是它代替了一个数组: True False

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-14 06:17:48

我不知道为什么在loc不起作用,但使用loc和at在一起工作。

代码语言:javascript
复制
DynamTPs.loc[TATicketNum].at['Dynamic TP-1 lane Time'] = ColTime
票数 0
EN

Stack Overflow用户

发布于 2020-12-12 08:04:48

  1. 在"ColNum += 1“之后使用打印来找出”pd.isnull(ColValues)或ColValues“中出现的问题。

  1. 在第4行之前打印"TADFDfName.ilocRowNum“以确定其类型和值
票数 0
EN

Stack Overflow用户

发布于 2020-12-12 16:50:49

iloc方法中出现了这种情况

代码语言:javascript
复制
TADF[DfName]['DateTime'].iloc[RowNum]

你对RowNum了解多少?框架的行索引(或者现在可能是级数)如何?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65262572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档