我想做的是比较一下价值。如果所有语句都为真,则将该值分配给dataframe中的特定单元格。
这是我的代码:
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是正确的(如下面的示例所示)等等。
追踪结果是:
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):
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泳道时间’):
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”(硬编码字符串),它也不起作用。但是没有错误信息。
当我尝试
TimeColIndex = DynamTPs.columns.get_loc('Dynamic TP-1 lane Time')这应该是给我一个整数,但是它代替了一个数组: True False
发布于 2020-12-14 06:17:48
我不知道为什么在loc不起作用,但使用loc和at在一起工作。
DynamTPs.loc[TATicketNum].at['Dynamic TP-1 lane Time'] = ColTime发布于 2020-12-12 08:04:48
发布于 2020-12-12 16:50:49
的iloc方法中出现了这种情况
TADF[DfName]['DateTime'].iloc[RowNum]你对RowNum了解多少?框架的行索引(或者现在可能是级数)如何?
https://stackoverflow.com/questions/65262572
复制相似问题