【问题标题】:How to add prefix to only certain columns in python如何为python中的某些列添加前缀
【发布时间】:2021-11-01 11:49:48
【问题描述】:

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

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

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

【问题讨论】:

  • 尝试:df.rename(columns = lambda col: f"Ind_{col}" if col in ('D', 'E') else col) 或对列进行分配:df.columns = [f"Ind_{col}" if col in ('D', 'E') else col for col in df]。索引是不可变的,因此您必须完全创建一个新索引。

标签: python pandas dataframe prefix columnname


【解决方案1】:

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

索引是不可变的,它们是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_'))

【讨论】:

  • 感谢您列出这么多解决方案。你会推荐哪一个?
  • @Jamie 可能是最后两个,也可能是第一个
【解决方案2】:

您可以使用重命名方法:

df = df.rename(columns = {
    'D':'Ind_D',
    'E':'Ind_E'
})

【讨论】:

  • 感谢您的回答。我最初尝试过这个。它有效,但我认为如果我将来想更改更多列,这不是最好的方法。另外,我想将它包含在一个函数中以添加不同的后缀,所以硬编码它并不好。
  • 是的,你是对的 :) 在这种情况下,U12-Forward 的答案对你来说更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 2020-04-26
  • 1970-01-01
  • 2021-09-26
  • 2017-08-26
  • 1970-01-01
相关资源
最近更新 更多