使用迭代名称按索引重命名pandas中的多个列

3

如果之前已经有类似的问题被问过,我会道歉。我搜索了一下,但是找不到解决方案。

我有一个DataFrame数据框,就像这样:

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

非常感谢您的帮助!

4个回答

3
你可以迭代它来更改名称。更改范围以获取所需范围,例如...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

不要忘记重新分配。 - sammywemmy
这是一个原地操作,不需要重新分配。 - Epsi95
enumerate(df.columns[1:3],1) will eliminate the use of {index+1} - anky

1
如果你想修改原始列名而不是返回一个副本,可以这样做:
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

0
你可以创建一个 list_of_names,然后使用 columns 属性:
list_of_name = [your code here]
df.columns = list_of_names

0

你可以使用字典来调用 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接