选择数据帧标题并编辑Pandas

时间:2017-10-19 05:27:27

标签: python pandas

我目前正在处理具有相同标头的r个数据帧。我想选择除了一个以外的所有内容(例如,除了' Apple')并通过在它们旁边添加数据框号来更改它们。

在这种情况下,我的所有r数据帧都有:

                Apple             Orange            Pear       ...
0                  70                  5               3       ...
1                  15                  1               4       ...
2                  17                  1               6       ...
3                  26                  2               7       ...
4                  12                  1               2       ...
5                  16                  1               0       ...
6                  13                  1               1       ...

我试过了:

for r in range(len(csv_files)):
     dfs[r].columns = [col_name + ' R{}'.format(r+1) for col_name in dfs[r].columns]

对于数据帧1,

             Apple R1          Orange R1         Pear R1       ...
0                  70                  5               3       ...
1                  15                  1               4       ...
2                  17                  1               6       ...
3                  26                  2               7       ...
4                  12                  1               2       ...
5                  16                  1               0       ...
6                  13                  1               1       ...

对于数据帧2,

             Apple R2          Orange R2         Pear R2       ...
0                  70                  5               3       ...
1                  15                  1               4       ...
2                  17                  1               6       ...
3                  26                  2               7       ...
4                  12                  1               2       ...
5                  16                  1               0       ...
6                  13                  1               1       ...

对于数据帧3,

             Apple R3          Orange R3         Pear R3       ...
0                  70                  5               3       ...
1                  15                  1               4       ...
2                  17                  1               6       ...
3                  26                  2               7       ...
4                  12                  1               2       ...
5                  16                  1               0       ...
6                  13                  1               1       ...

这给了我几乎我想要的东西,但是我无法在这个动作中找到如何不包括[' Apple'],例如在数据帧3上:

                Apple          Orange R3         Pear R3       ...
0                  70                  5               3       ...
1                  15                  1               4       ...
2                  17                  1               6       ...
3                  26                  2               7       ...
4                  12                  1               2       ...
5                  16                  1               0       ...
6                  13                  1               1       ...

谢谢:)

2 个答案:

答案 0 :(得分:1)

如果列和Apple的相同位置始终是第一个:

for r in range(len(csv_files)):
     dfs[r].columns = ['Apple'] + 
                      [col_name + ' R{}'.format(r+1) for col_name in dfs[r].columns[1:]]

没有定义列位置的更一般的解决方案:

for r in range(len(csv_files)):
     dfs[r].columns = [c if c == 'Apple' else c + ' R{}'.format(r+1) for c in dfs[r].columns]

答案 1 :(得分:0)

您可以使用

for r in range(len(csv_files)):
     newcols = dfs[r].columns[1:] + ' R{}'.format(r)
     dfs[r].columns = ['Apple'] + newcols.tolist()

或者,使用map之类的

for r in range(len(csv_files)):
     newcols = dfs[r].columns[1:].map(lambda x: '{} R{}'.format(x, r))
     dfs[r].columns = ['Apple'] + newcols.tolist()