如何仅向 python 中的某些列添加前缀
How to add prefix to only certain columns in python
我有一个包含 5 列的数据框,比如 'A'、'B'、'C'、'D' 和 'E'。我只想为列 'D' 和 E 添加前缀。我尝试了以下操作,但收到一条错误消息,提示“索引不支持可变操作”。
df.columns[-2:] = [str(col) + 'Ind_' for col in ['D','E']]
我该如何解决这个问题,或者有没有其他方法可以达到我想要的效果?谢谢
您可以使用重命名方法:
df = df.rename(columns = {
'D':'Ind_D',
'E':'Ind_E'
})
您的代码不起作用的原因:
索引不是可变的,它们是 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_'))
我有一个包含 5 列的数据框,比如 'A'、'B'、'C'、'D' 和 'E'。我只想为列 'D' 和 E 添加前缀。我尝试了以下操作,但收到一条错误消息,提示“索引不支持可变操作”。
df.columns[-2:] = [str(col) + 'Ind_' for col in ['D','E']]
我该如何解决这个问题,或者有没有其他方法可以达到我想要的效果?谢谢
您可以使用重命名方法:
df = df.rename(columns = {
'D':'Ind_D',
'E':'Ind_E'
})
您的代码不起作用的原因:
索引不是可变的,它们是 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_'))