我有一个形状为(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
进行递增操作,我不太理解,因为这样做有效。
答案 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的元素,如果它是索引,则可以按原样访问。