微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:While 循环索引越界

如何解决Python:While 循环索引越界

在阅读了许多其他类似帖子中的答案后,我仍然无法弄清楚我错在哪里。

我的问题简而言之:我正在 Python 中转换我已经在 Matlab 和 R 中成功使用的代码

数据:我有一个名为“sign”(651x1)的数据框,其中有一列“Signals”。唯一的值是: [-1,1,nan] 。下面是一个不遵循实际顺序的示例

|             |Signals |
|Date         | ---    |
|2018-07-23   | nan    |
|2018-07-24   |1       |
|2018-07-25   |-1      |
|2018-07-26   |0       |

现在,我创建了另外 2 个表: 1)'Pos_long' (651x2) 2)'Pos_short'(651x2)
对于“符号”的长度,两者都用“零”填充。下面是一个例子:

|             |Entry   |Exit   |
|0            | 0      |0      |     
|1            | 0      |0      | 
|2            | 0      |0      |

我的目标:我想使用以下规则为整个“符号”长度创建一个循环:

  • 如果 sign[row] 是 -1,那么我以这种方式填充表 'Pos_short':第一列(Entry)报告我找到 '-1' 的行数,而第二列(Exit)报告的是我退出交易的行,即当我找到第一个符号[row]=0
  • 如果 sign[row] 是 1,那么我会按照上面与 'Pos_short' 相同的标准填充表 'Pos_long'。

所以在这里按照我的代码

r=0
k=0
while k<=(len(sign)-1):
    if  sign['Signals'][k] == -1:
        Pos_short['Entry'][r]=k
        j=0
        while sign['Signals'][k+j]!=0:
            j+=1
        Pos_short['Exit'][r]=k+j
        k+=j
        r+=1
    k+=1
k=1

解释:一旦我找到“-1”,我就说它继续计算行数,直到找到第一行得到“0”。此时,它用各自的行数填充两列(进入和退出)。

不幸的是,与 Matlab 和 R 不同,我在理解索引出站时遇到问题,因为我得到的错误如下:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~\AppData\Local\Programs\Python\python37\lib\site-packages\pandas\core\indexes\base.py in get_value(self,series,key)
   4722         try:
-> 4723             return self._engine.get_value(s,k,tz=getattr(series.dtype,"tz",None))
   4724         except KeyError as e1:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 651

During handling of the above exception,another exception occurred:

IndexError                                Traceback (most recent call last)
<ipython-input-44-4d023ff81cb1> in <module>
      6         Pos_short['Entry'][r]=k
      7         j=0
----> 8         while sign['Signals'][k+j]!=0:
      9             j+=1
     10         Pos_short['Exit'][r]=k+j

~\AppData\Local\Programs\Python\python37\lib\site-packages\pandas\core\series.py in __getitem__(self,key)
   1062         key = com.apply_if_callable(key,self)
   1063         try:
-> 1064             result = self.index.get_value(self,key)
   1065 
   1066             if not is_scalar(result):

~\AppData\Local\Programs\Python\python37\lib\site-packages\pandas\core\indexes\datetimes.py in get_value(self,key)
    990 
    991         try:
--> 992             return com.maybe_Box(self,Index.get_value(self,key),key)
    993         except KeyError:
    994             try:

~\AppData\Local\Programs\Python\python37\lib\site-packages\pandas\core\indexes\base.py in get_value(self,key)
   4727 
   4728             try:
-> 4729                 return libindex.get_value_Box(s,key)
   4730             except IndexError:
   4731                 raise

pandas\_libs\index.pyx in pandas._libs.index.get_value_Box()

pandas\_libs\index.pyx in pandas._libs.index.get_value_at()

pandas\_libs\util.pxd in pandas._libs.util.get_value_at()

pandas\_libs\util.pxd in pandas._libs.util.validate_indexer()

IndexError: index out of bounds

我知道这与'k+j'有关,但我真的想不通。 我哪里错了? 谢谢

解决方法

好的,我终于明白了:代码很好,但在运行之前,我必须插入这一行:

sign.Signals[-1]=0

原因是在我的可用数据结束时,交易(就像我的情况一样)可能仍处于打开状态。这意味着有一个“卖出”订单 (-1) 未跟有“0”(平仓订单)。 这会影响“while/for 循环”并使其超出其界限。 希望它对某人有用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?