当前位置: 首页 > 知识库问答 >
问题:

重命名熊猫中的多个列

祁曦哲
2023-03-14

我有一个单一的CSV文件,在其中我想重命名一些列相同的名称。我的初始代码如下所示

df = pd.read_csv('New.csv')

我用这段代码从dataframe中提取了选定的列

df.columns[1::3]

此切片每隔三列获取一次。现在我想用相同的名称重命名每三列一次,但这样重命名我的列会出错

df.columns[1::3]= ['SomeName']
raise TypeError("Index does not support mutable operations")

有没有办法在pandas中重命名多个同名列?

除了手动操作,还有其他建议吗?

共有3个答案

靳睿
2023-03-14

基础pandas索引对象是numpy数组。

您可以利用这一事实,使用numpy约定进行切片和分配。

数据来自@jezrael。由于这个已知问题,需要显式提取值。

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':[5,3,6,9,2,4],
                   'F':list('aaabbb')})

arr = df.columns.values
arr[1::3] = range(2)
df.columns = arr

print(df)

   A  0  C  D  1  F
0  a  4  7  1  5  a
1  b  5  8  3  3  a
2  c  4  9  5  6  a
3  d  5  4  7  9  b
4  e  5  2  1  2  b
5  f  4  3  0  4  b
仲霍英
2023-03-14

df.columns的类型为pandas.indexes.base.Index,这就是您得到TypeError的原因。如果将其转换为列表,则可以使用切片进行更新(重命名),并将df.columns设置为更新后的列表。

这对我有效:

lst = list(df.columns)
lst[1::3] = ['someName']*len(lst[1::3])
df.columns = lst

或者使用唯一的新列名(正如@jezrael指出的,可能不建议使用相同的名称):

lst = list(df.columns)
lst[1::3] = ['someName{}'.format(x) for x in range(len(lst[1::3]))] 
df.columns = lst
濮宇定
2023-03-14

我认为最好使用重命名和独特的新列名称,如:

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':[5,3,6,9,2,4],
                   'F':list('aaabbb')})

print (df)
   A  B  C  D  E  F
0  a  4  7  1  5  a
1  b  5  8  3  3  a
2  c  4  9  5  6  a
3  d  5  4  7  9  b
4  e  5  2  1  2  b
5  f  4  3  0  4  b

d = dict(zip(df.columns[1::3], range(len(df.columns[1::3]))))
print (d)
{'B': 0, 'E': 1}


df = df.rename(columns=d)
print (df)
   A  0  C  D  1  F
0  a  4  7  1  5  a
1  b  5  8  3  3  a
2  c  4  9  5  6  a
3  d  5  4  7  9  b
4  e  5  2  1  2  b
5  f  4  3  0  4  b

或:

d = dict(zip(df.columns[1::3], 
             ['name{}'.format(x) for x in range(len(df.columns[1::3]))]))
print (d)
{'B': 'name0', 'E': 'name1'}

df = df.rename(columns=d)
print (df)
   A  name0  C  D  name1  F
0  a      4  7  1      5  a
1  b      5  8  3      3  a
2  c      4  9  5      6  a
3  d      5  4  7      9  b
4  e      5  2  1      2  b
5  f      4  3  0      4  b

不建议为相同的列名重命名解决方案:

d = dict.fromkeys(df.columns[1::3], 'Name')
print (d)
{'B': 'Name', 'E': 'Name'}

df = df.rename(columns=d)
print (df)
   A  Name  C  D  Name  F
0  a     4  7  1     5  a
1  b     5  8  3     3  a
2  c     4  9  5     6  a
3  d     5  4  7     9  b
4  e     5  2  1     2  b
5  f     4  3  0     4  b

因为如果想要查看lct columnName它将返回DataFrame中的所有列:

print (df['Name'])
   Name  Name
0     4     5
1     5     3
2     4     6
3     5     9
4     5     2
5     4     4

 类似资料:
  • 问题内容: 我在df中有几列相同的名称。需要重命名它们。无论如何,通常的重命名都会重命名,我可以将下面的blah重命名为blah1,blah4,blah5吗? 在[7]中: 问题答案: 我希望在Pandas中找到比通用Python解决方案更多的解决方案。如果Column的get_loc()函数找到带有“ True”值的重复项,则该掩码数组将返回掩码数组,“ True”值指向找到重复项的位置。然后,

  • 问题内容: 我有一个名为的数据框。如何重命名唯一的一列标题?例如到? 问题答案: data.rename(columns={‘gdp’:’log(gdp)’}, inplace=True) 在它接受一个字典作为一个PARAM演出,所以你只是传递一个字典一次入境。

  • 问题内容: 我有一些数据,导入时会得到以下不需要的列,我正在寻找一种删除所有这些数据的简便方法 它们被0索引索引,所以我尝试了类似 但这不是很有效。我尝试编写一些for循环,但这使我感到震惊,因为熊猫的行为不佳。因此,我在这里问这个问题。 我已经看到了一些类似的示例(投递多列pandas),但这无法回答我的问题。 问题答案: 我不知道您所说的低效率是什么意思,但是如果您指的是打字,那么选择感兴趣的

  • 问题内容: 支持多级列名: 此功能非常有用,因为它允许“水平”地将同一数据框的多个版本附加到区分实例的列名称的第一级(在我的示例中)。 想象一下我已经有一个这样的数据框: 有没有一种好方法可以向列名添加另一个级别,类似于行索引: 问题答案: 无需创建元组列表 采用: 结果数据框: 2014年1月25日起提出要求

  • 我知道我可以给单只熊猫重新命名。DataFrame列具有: 但是我想在不知道列名称的情况下重命名它(基于它的索引-尽管我知道字典没有)。我想重命名第1列,如下所示: 但是在DataFrame.columns dict中没有“1”条目,因此不进行重命名。我怎样才能做到这一点?

  • 我试图基于单个条件,根据多列中的值过滤数据帧,但保留我根本不想应用过滤器的其他列。 我回顾了这些答案,第三个是最接近的,但仍然没有运气: 如何按多列筛选数据帧 筛选多个列 Python熊猫-如何按一个值筛选多个列 设置: 电流输出: 期望输出: 我试过: 以及许多其他变体(,,