在pandas中使用迭代名称通过索引重命名多个列



如果之前有人问过类似的问题,我很抱歉,我四处找了找,但找不到解决方案。

我有一个像这样的数据框架:

df = pd.DataFrame({'A':list('abcdef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':list('aaabbb')})

我想重命名这个数据框的列,比如,索引[:,1:2],在这种情况下是B和C,为一个迭代模式的东西。

例如新的列名:

A Q1 Q2 D E

有一个前缀,1、2等可以根据范围自动递增。一个额外的好处是,如果我还可以控制字符串部分,这样我就可以得到:(假设我提供了一个包含可能条目的列表,如=

names = ['Dog','Cat']
A QDog1 QCat2 D E

任何帮助都是感激的,谢谢!

您可以遍历它以更改名称。更改范围以获得您想要的范围,如...numerate(df.columns[1:3])..

names = ['Dog','Cat']
for index, column_name in enumerate(df.columns[1:3]):
df.rename(columns={column_name: f'Q{names[index]}{index+1}'}, inplace=True)

输出
A   QDog1   QCat2   D   E
0   a   4   7   1   a
1   b   5   8   3   a
2   c   4   9   5   a
3   d   5   4   7   b
4   e   5   2   1   b
5   f   4   3   0   b

如果您希望修改原始列名而不返回副本,一次也可以这样做:

names = ['Dog','Cat']
df.columns.to_numpy()[1:3] = [f'Q{b}{a}' for a,b in enumerate(names,1)]

较早的详细版本:

names = ['Dog','Cat']
idx = df.columns.to_numpy()
idx[1:3] = [f'Q{b}{a}' for a,b in enumerate(names,1)]
df.columns= idx
print(df)
A  QDog1  QCat2  D  E
0  a      4      7  1  a
1  b      5      8  3  a
2  c      4      9  5  a
3  d      5      4  7  b
4  e      5      2  1  b
5  f      4      3  0  b

可以创建list_of_names,然后使用columns属性:

list_of_name = [your code here]
df.columns = list_of_names

您可以将rename方法用于字典:

names = iter(['Dog','Cat'])
dct = {col: f'Q{next(names)}{num}' for num, col in enumerate(df.columns[1:3], 1)}
# {'B': 'QDog1', 'C': 'QCat2'}
df.rename(columns=dct, inplace=True)

输出:

A  QDog1  QCat2  D  E
0  a      4      7  1  a
1  b      5      8  3  a
2  c      4      9  5  a
3  d      5      4  7  b
4  e      5      2  1  b
5  f      4      3  0  b

最新更新