使用索引号同时更改熊猫数据框中的多个列名(不是所有列名)

Posted

技术标签:

【中文标题】使用索引号同时更改熊猫数据框中的多个列名(不是所有列名)【英文标题】:Change multiple column names in pandas dataframe (not all colmn names) at the same time using index numbers 【发布时间】:2021-01-13 23:23:47 【问题描述】:

我已经使用这个成功地更改了数据框中的单个列名:

df.columns=['new_name' if x=='old_name' else x for x in df.columns]

但是,我有很多列要更新(但不是全部 240 个),如果我能提供帮助,我不想为每个更改都写出来。

我已尝试在此线程中遵循 @StefanK 的建议:

Changing multiple column names but not all of them - Pandas Python

我的代码:

df.columns=[[4,18,181,182,187,188,189,190,203,204]]=['Brand','Reason','Chat_helpful','Chat_expertise','Answered_questions','Recommend_chat','Alternate_help','Customer_comments','Agent_category','Agent_outcome']

但我收到一条错误消息:

File "<ipython-input-17-2808488b712d>", line 3
    df.columns=[[4,18,181,182,187,188,189,190,203,204]]=['Brand','Reason','Chat_helpful','Chat_expertise','Answered_questions','Recommend_chat','Alternate_help','Customer_comments','Agent_category','Agent_outcome']
                   ^
SyntaxError: can't assign to literal

所以在谷歌上搜索了错误并阅读了更多 S.O.这里的问题在我看来它正在尝试将数字读取为整数而不是索引?不过我不确定。

那么我该如何解决它,以便将数字视为索引?!我要替换的列名每个至少有 10 个字长,所以我不想把它们全部打出来!我唯一的想法是以某种方式使用 iloc,但我要在这里进入新领域!

非常感谢您的帮助

【问题讨论】:

【参考方案1】:

删除代码中 df.columns 之后的“=”并改用它:

df.columns.values[[4,18,181,182,187,188,189,190,203,204]]=['Brand','Reason','Chat_helpful','Chat_expertise','Answered_questions','Recommend_chat','Alternate_help','Customer_comments','Agent_category','Agent_outcome']

【讨论】:

我宁愿避免这个link 感谢@jezrael,它为这种方法提供了必要的谨慎。【参考方案2】:

由于索引不支持可变操作将其转换为numpy数组,重新分配并设置回:

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.to_numpy()
arr[[0,2,3]] = list('RTG')
df.columns = arr
print (df)
   R  B  T  G  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

所以你的数据使用:

idx = [4,18,181,182,187,188,189,190,203,204]
names = ['Brand','Reason','Chat_helpful','Chat_expertise','Answered_questions','Recommend_chat','Alternate_help','Customer_comments','Agent_category','Agent_outcome']

arr = df.columns.to_numpy()
arr[idx] = names
df.columns = arr

【讨论】:

以上是关于使用索引号同时更改熊猫数据框中的多个列名(不是所有列名)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用一系列列名从熊猫数据框中获取系列?

如何在熊猫数据框中插入列名? [复制]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]