[英]Creating function to rename columns in pandas dataframe
我有 dataframe 如下:
df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
我嘗試創建一個 function 允許動態更改列名,我可以在 function 中輸入舊列名和新列名,如下所示:
def rename_column_name(df, old_column, new_column):
df = df.rename({'{}'.format(old_column) : '{}'.format(new_column)}, axis=1)
return df
此 function 僅適用於我只有一個輸入的情況,如下所示:
new_df = rename_column_name(df, '$a' , 'a')
這給了我這個 new_df 如下:
new_df = pd.DataFrame({'a':[1,2], '$b': [10,20]})
但是,我想創建一個 function 允許我根據我的偏好對多個/一個列進行更改:
new_df = rename_column_name(df, ['$a','$b'] , ['a','b'])
並得到 new_df 如下
new_df = pd.DataFrame({'a':[1,2], 'b': [10,20]})
那么,如何讓我的 function 更具動態性,讓我可以自由輸入多個/一個列名並重命名它們?
您不需要 function,您可以使用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
OP需要的Function:
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
您需要將列list
傳遞給此 function。 它可以是多列或單列。 這應該可以滿足您的需求。
def rename_column_name(df, old_column, new_column):
if not isinstance(old_column,(list,tuple)):
old_column = [old_column]
if not isinstance(new_column,(list,tuple)):
old_column = [new_column]
df = df.rename({'{}'.format(old) : '{}'.format(new) for old,new in zip(old_column,new_column)}, axis=1)
return df # dang i should have used dict.zip like in the other solution :P
我想......雖然我不明白這比打電話更容易
df.rename(columns={'$a':'a','$b':b})
您可以使用 zip function 做到這一點,其中 old_column_names 和 new_column_names 應該是列表。
def rename_column_name(df, old_column_names, new_column_names):
//validating the such that all the new names have been passed
if(len(old_column_names) == len(new_column_names)):
df = df.rename(columns=dict(zip(old_column_names, new_column_names)), inplace=True)
return df
要處理一列重命名並將它們作為列表傳遞,function 需要進一步的條件,這些條件可以是
def rename_column_name(df, old_column_names, new_column_names):
//validating the such that all the new names have been passed
if(isinstance(old_column_names, list)) and (isinstance(new_column_names, list)):
if(len(old_column_names) == len(new_column_names)):
df = df.rename(columns=dict(zip(old_column_names, new_column_names)), inplace=True)
elif (isinstance(old_column_names, str)) and (isinstance(new_column_names, str)):
df = df.rename(columns={'{}'.format(old_column_names) : '{}'.format(new_column_names)}, inplace=True)
return df
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.