【问题标题】:Unexpected pandas index error when using a for loop使用 for 循环时出现意外的 pandas 索引错误
【发布时间】:2020-05-07 07:32:24
【问题描述】:

我有一个形状为 - (133, 6) 的 Pandas DataFrame - 我正在尝试使用 iloc 迭代框架,然后选择数据块并将其附加到列表中。

我有一个起始位置列表:

start_positions = [6, 32, 58, 84, 110]

结束位置是+7行,所以我试过这个:

frames = []
for x in start_positions:
    frames.append(df.iloc[start_positions[x] : start_positions[x]+7])

不过是扔:

IndexError: index 6 is out of bounds for axis 0 with size 5

如果我手动递增 start_positions,我不太明白这一点。

【问题讨论】:

  • 你想从这段代码@Maverick 中实现什么?
  • 每一块代表一年的数据,每一列代表一个不同的类别。所以目的是提取数据并将其存储在与年份相对应的不同位置。
  • for x in start_positions: x 不是索引!您使用 start_positions[x] ,因此您会看到错误。忘记数据框,您尝试索引列表本身时会出现问题。
  • 这能回答你的问题吗? Python Loop: List Index Out of Range

标签: python python-3.x pandas


【解决方案1】:

我认为代码从一开始就在 for 循环中存在问题。查看frames.append(df.iloc[start_positions[x] : start_positions[x]+7]) 中的start_positions[x]。 for 循环中 x 的值从 6 开始,但 start_positions 可以拥有的最大索引是 4,因为 len(start_positions)=5

@Maverick ,我认为您可能想要做的是删除 start_positions 并拥有类似的东西(但没有测试代码)

for x in start_positions:
    frames.append(df.iloc[x : x+7])

【讨论】:

    【解决方案2】:

    尝试使用for x in range(len(start_positions)) 而不是for x in start_positions 作为:

    frames = []
    for x in range(len(start_positions)):
        print(start_positions[x],":",start_positions[x]+7)
    

    结果:

    6 : 13
    32 : 39
    58 : 65
    84 : 91
    110 : 117
    

    【讨论】:

      【解决方案3】:

      另一种可能的解决方案是使用:

      frames = []
      for x in start_positions:
          frames.append(df.iloc[x:x+7])
      

      x 是 start_positions 的一个元素,可以按原样访问,如果它是一个索引,它将按照您的方式使用。

      【讨论】:

        猜你喜欢
        • 2018-05-08
        • 2021-07-01
        • 2021-12-31
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        相关资源
        最近更新 更多