如果之前有人问过类似的问题,我很抱歉,我四处找了找,但找不到解决方案。
我有一个像这样的数据框架:
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