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)
那么,如何使我的函数更加动态,以允许我自由输入多个/一个列名称并重命名它们?
你不需要一个函数,你可以使用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此函数。它可以是多列或单列。这应该做你正在寻找的。