Pandas:重命名具有相同名称的列

问题描述 投票:0回答:6

我有一个包含重复列名 a、b 和 b 的数据框。我想将第二个 b 重命名为 c 。

df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6], "b1": [7, 8, 9]})
df.rename(index=str, columns={'b1' : 'b'})

尝试过但没有成功..

df.rename(index=str, columns={2 : "c"})
python pandas dataframe indexing
6个回答
9
投票

尝试:

>>> df.columns = ['a', 'b', 'c']

>>> df
   a  b  c
0  1  4  7
1  2  5  8
2  3  6  9

2
投票

这些解决方案没有考虑到有很多列的问题。 这是一个解决方案,无论列的数量如何,您都可以将具有相同名称的列重命名为唯一的名称

 df.columns = ['name'+str(col[0]) if col[1] == 'name' else col[1] for col in enumerate(df.columns)]

1
投票

您始终可以手动重命名所有列。

df.columns = ['a', 'b', 'c']

0
投票

如果您的列是有序的并且您想要字母列,请不要手动键入名称。这很容易出错。

您可以使用

string.ascii_lowercase
,假设您最多有 26 列:

from string import ascii_lowercase

df = pd.DataFrame(columns=['a', 'b', 'b1'])

df.columns = list(ascii_lowercase[:len(df.columns)])

print(df.columns)

Index(['a', 'b', 'c'], dtype='object')

0
投票

为了借鉴 @aze45sq6d 的答案,这里有另一个解决方案,它允许您按列的顺序更改列的名称(如索引,但不是技术上的):

column_indices_to_change = {5: 'New name'}
df.columns = [column_indices_to_change.get(enum, col) for enum, col in enumerate(df.columns)]

-1
投票

你可以简单地做:

df.columns = ['a','b','c']
© www.soinside.com 2019 - 2024. All rights reserved.