使用for循环时出现意外的熊猫索引错误

时间:2020-01-21 09:18:18

标签: python python-3.x pandas

我有一个形状为(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进行递增操作,我不太理解,因为这样做有效。

3 个答案:

答案 0 :(得分:1)

我认为for循环中的代码从一开始就有问题。查看start_positions[x]中的frames.append(df.iloc[start_positions[x] : start_positions[x]+7])。 for循环中x的值从6开始,但是自start_positions

起,最大索引len(start_positions)=5可以为4。

@Maverick,我想您可能想删除start_positions并进行类似操作(但没有测试代码)

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

答案 1 :(得分:1)

尝试将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

答案 2 :(得分:0)

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

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

x是start_positions的元素,如果它是索引,则可以按原样访问。