Pandas中如何通过列号批量更改列名?

3

我借用了这里的一个例子。我有一个类似这样的数据框:

# Import pandas package 
import pandas as pd 
   
# Define a dictionary containing ICC rankings 
rankings = {'test': ['India', 'South Africa', 'England', 
                            'New Zealand', 'Australia'], 
              'odi': ['England', 'India', 'New Zealand', 
                            'South Africa', 'Pakistan'], 
               't20': ['Pakistan', 'India', 'Australia', 
                              'England', 'New Zealand']} 
   
# Convert the dictionary into DataFrame 
rankings_pd = pd.DataFrame(rankings) 
   
# Before renaming the columns 
print(rankings_pd)
          test           odi          t20
0         India       England     Pakistan
1  South Africa         India        India
2       England   New Zealand    Australia
3   New Zealand  South Africa      England
4     Australia      Pakistan  New Zealand

现在假设我想要改变第一列和第二列的名称。这是我尝试的方法:

rankings_pd[rankings_pd.columns[0:2]].columns =  ['tes_after_change', 'odi_after_change']
print(rankings_pd[rankings_pd.columns[0:2]].columns)
Index(['test', 'odi'], dtype='object')

但是似乎返回了完全相同的列名,并没有改变它们。


非常接近于重复...但是微微有所不同 (-: 然而,你可以从这些问答中学到一些东西 - piRSquared
3个回答

8

只需使用rename()方法,并将旧值和新值的字典作为键值对传递到columns参数中:

rankings_pd=rankings_pd.rename(columns={'test':'tes_after_change','odi':'odi_after_change'})

Edit@sammywemmy完成:

你可以使用匿名函数扩展这个想法:

rankings_pd.rename(columns= lambda df: f"{df}_after_change" if df in ("test", "odi") else df)

1
你可以使用匿名函数扩展这个想法: rankings_pd.rename(columns= lambda df: f"{df}_after_change" if df in ("test", "odi") else df) - sammywemmy
@sammywemmy 谢谢你的建议...我已经添加了这个答案 :) - Anurag Dabas

4

你不应该/不能替换部分 columns。你需要一次性替换它们全部:

rankings_pd.columns = ['tes_after_change', 'odi_after_change'] + rankings_pd.columns[2:].tolist()

4
您可以使用to_numpy()函数并替换切片:
rankings_pd.columns.to_numpy()[0:2] = ['tes_after_change', 'odi_after_change']

rankings_pd.columns
#Index(['tes_after_change', 'odi_after_change', 't20'], dtype='object')

使用np.r_df.rename来实现

rankings_pd.rename(dict(zip(rankings_pd.columns[np.r_[0:2]],
                        ['tes_after_change', 'odi_after_change'])),axis=1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接