循环列表没有按预期响应

时间:2017-10-24 19:29:57

标签: python pandas loops dataframe

我有一些代码应该通过数据框的列并将其中一些重命名为其他内容。简单的循环,但它并没有像预期的那样出现。以下是我认为的相关代码:

Headers = df.columns.values.tolist()
print(Headers)

for i in range(24):
    df = df.rename(columns = {Headers[i+4]: ('b'+ str(32-i))})
    print(i, Headers[i+4], 'b'+ str(32 - i))

Headers = df.columns.values.tolist()
print(Headers)

这是输出:

['Lbl #', 'Value', 'Time', 'Name', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'b10', 'b11', 'b12', 'b13', 'b14', 'b15', 'b16', 'b17', 'b18', 'b19', 'b20', 'b21', 'b22', 'b23']
0 b0 b32
1 b1 b31
2 b2 b30
3 b3 b29
4 b4 b28
5 b5 b27
6 b6 b26
7 b7 b25
8 b8 b24
9 b9 b23
10 b10 b22
11 b11 b21
12 b12 b20
13 b13 b19
14 b14 b18
15 b15 b17
16 b16 b16
17 b17 b15
18 b18 b14
19 b19 b13
20 b20 b12
21 b21 b11
22 b22 b10
23 b23 b9
['Lbl #', 'Value', 'Time', 'Name', 'b32', 'b31', 'b30', 'b29', 'b28', 'b27', 'b26', 'b25', 'b24', 'b9', 'b10', 'b11', 'b12', 'b13', 'b14', 'b15', 'b16', 'b15', 'b14', 'b13', 'b12', 'b11', 'b10', 'b9']

这里的目标是将b0:b23更改为b32:b9,这将对应于正在记录的数据。如果查看第二个列名列表,则列重命名会产生意外结果。从索引[13:19]开始,重命名功能似乎没有做任何事情?

谢谢

1 个答案:

答案 0 :(得分:1)

问题是您多次重命名某些列。在浏览循环时,您会将RecyclerViewAdapter重命名为b9,但已有一个名为b23的列!在循环的后面,您会将b23重命名为b23,但有两个b9,因此您最终会在最终数据框中输入两个b23 b9

您需要做的是立即重命名所有列。而不是你的for循环,请执行:

b23