在 Pandas 中按列号更改多个列名?

arm*_*min 3 python pandas

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

# 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
Run Code Online (Sandbox Code Playgroud)

现在假设我想更改第一列和第二列的名称。这就是我正在尝试的:

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')
Run Code Online (Sandbox Code Playgroud)

但这似乎返回了完全相同的列名,而不是改变它们。

Anu*_*bas 8

只需使用rename()方法并将dictionary旧值和新值作为参数中的键值对传递:-

rankings_pd=rankings_pd.rename(columns={'test':'tes_after_change','odi':'odi_after_change'})
Run Code Online (Sandbox Code Playgroud)

编辑@sammywemmy

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

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