创建函数以重命名熊猫数据框中的列

rai*_*123 2 python rename function dataframe pandas

我有如下数据框:

df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个允许动态更改列名的函数,我可以在函数中输入旧列名和新列名,如下所示:

def rename_column_name(df, old_column, new_column):
    df = df.rename({'{}'.format(old_column) : '{}'.format(new_column)}, axis=1)
    return df
Run Code Online (Sandbox Code Playgroud)

此功能仅适用于我只有一个输入的情况,如下所示:

new_df = rename_column_name(df, '$a' , 'a')
Run Code Online (Sandbox Code Playgroud)

这给了我这个 new_df 如下:

new_df = pd.DataFrame({'a':[1,2], '$b': [10,20]})
Run Code Online (Sandbox Code Playgroud)

但是,我想创建一个函数,允许我根据自己的喜好对多列/一列进行更改:

new_df = rename_column_name(df, ['$a','$b'] , ['a','b'])
Run Code Online (Sandbox Code Playgroud)

并获得如下所示的 new_df

new_df = pd.DataFrame({'a':[1,2], 'b': [10,20]})
Run Code Online (Sandbox Code Playgroud)

那么,如何使我的函数更加动态,以允许我自由输入多个/一个列名称并重命名它们?

May*_*wal 5

你不需要一个函数,你可以使用dict comprehension

In [265]: old_names = df.columns.tolist()                                                                                                                                                                   

In [266]: new_names = ['a','b']                                                                                                                                                                             

In [268]: df = df.rename(columns=dict(zip(old_names, new_names)))                                                                                                                                  

In [269]: df                                                                                                                                                                                                
Out[269]: 
   a   b
0  1  10
1  2  20
Run Code Online (Sandbox Code Playgroud)

OP需要的功能:

In [274]: def rename_column_name(df, old_column_list, new_column_list): 
     ...:     df = df.rename(columns=dict(zip(old_column_list, new_column_list))) 
     ...:     return df 
     ...:                                                                                                                                                                                                   

In [275]: rename_column_name(df,old_names,new_names)                                                                                                                                                        
Out[275]: 
   a   b
0  1  10
1  2  20
Run Code Online (Sandbox Code Playgroud)

您需要将 a 列传递给list此函数。它可以是多列或单列。这应该做你正在寻找的。