首页 > 解决方案 > 如何为python中的某些列添加前缀

问题描述

我有一个包含 5 列的数据框,例如“A”、“B”、“C”、“D”和“E”。我只想为列“D”和 E 添加前缀。我尝试了以下操作,但收到一条错误消息,提示“索引不支持可变操作”。

df.columns[-2:] = [str(col) + 'Ind_' for col in ['D','E']]

我该如何解决这个问题,或者有没有其他方法可以实现我想要的?谢谢。

标签: pythonpandasdataframeprefixcolumnname

解决方案


您的代码不起作用的原因:

索引是不可变的,它们是Index对象,因此您必须完全修改所有列。它不支持切片分配。

就像元组一样,元组也是可变的,因此元组也不支持切片分配。

如你看到的:

>>> a = (1, 2, 3)
>>> a[:2] = (100, 200)
Traceback (most recent call last):
  File "<pyshell#106>", line 1, in <module>
    a[:2] = (100, 200)
TypeError: 'tuple' object does not support item assignment
>>> 

也会报错。

解决方案:

就像是:

df.columns = np.concatenate([df.columns[:-2], df.columns[-2:] + 'Ind_'])

或者:

df = df.rename(columns = lambda x: f"{x}Ind_" if x in {'D', 'E'} else x)

或者:

df = df.set_axis(np.concatenate([df.columns[:-2], df.columns[-2:] + 'Ind_']), axis=1)

或者这样concat

df = pd.concat([df.iloc[:, :-2], df.iloc[:, -2:].add_suffix('Ind_')], axis=1)

也这样join

df = df.iloc[:, :-2].join(df.iloc[:, -2:].add_suffix('Ind_'))

推荐阅读