簡體   English   中英

創建 function 以重命名 pandas dataframe 中的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM