簡體   English   中英

Pandas Series.rename未反映在DataFrame列中

[英]Pandas Series.rename not reflected in DataFrame columns

我試圖重新命名column由特定列驗證值。 這是設置:

In [9]: import pandas as pd

In [10]: df = pd.DataFrame(
    ...:         {"unknown_field": ['bob@gmail.com', 'shirley@gmail.com', 'groza@pubg.com']}
    ...:     )

In [11]: df
Out[11]: 
       unknown_field
0      bob@gmail.com
1  shirley@gmail.com
2     groza@pubg.com

使用以Pandas.Series對象為參數的validate_column(ser) ,可以驗證該列中的值,並使用一組預定義的列名來修改該特定列的列名。 為簡單起見,在此示例中,該列被驗證為email列。

In [12]: def validate_column(ser):
    ...:     # Value validation method returns that this column is email column
    ...:     ser.rename('email', inplace=True)
    ...:     

unknown_field的當前名稱為: unknown_field ,並且按預期的那樣,在執行validate_column方法后,該名稱將更改為email

In [13]: df.unknown_field
Out[13]: 
0        bob@gmail.com
1    shirley@gmail.com
2       groza@pubg.com
Name: unknown_field, dtype: object

In [14]: validate_column(df.unknown_field)

In [15]: df.unknown_field
Out[15]: 
0        bob@gmail.com
1    shirley@gmail.com
2       groza@pubg.com
Name: email, dtype: object

但是, df的列名稱未按我的預期進行修改。 仍在df變量中將其命名為unknown_field

In [16]: df
Out[16]: 
       unknown_field
0      bob@gmail.com
1  shirley@gmail.com
2     groza@pubg.com

當前,我使用以下代碼手動修改df變量中的列名稱。

In [17]: for col in df.select_dtypes(object):
    ...:     df.rename(columns={col: df[col].name}, inplace=True)
    ...:     

In [18]: df
Out[18]: 
               email
0      bob@gmail.com
1  shirley@gmail.com
2     groza@pubg.com

In [19]: 

我的問題是:

是否有更有效/直接的方法來重命名Series並直接反映在DataFrame

重新編寫函數以接受兩個參數:

def validate_column(df, col_name):
    # Value validation method returns that this column is email column
    return df.rename({col_name : 'email'}, axis=1)

現在,通過DataFrame.pipe調用函數:

df.pipe(validate_column, col_name='unknown_field')

               email
0      bob@gmail.com
1  shirley@gmail.com
2     groza@pubg.com

很干凈。 如果要鏈接驗證,這將很有用:

(df.pipe(validate_column, col_name='unknown_field')
   .pipe(validate_column, col_name='some_other_field')
   .pipe(validate_column, col_name='third_field')
)

...或修改validate_column以一次驗證多個列。

請注意,重命名不再就地完成,並且從pipe返回的任何結果都需要分配回去。

使用數據框的重命名功能並設置列參數。

import pandas as pd
df = pd.DataFrame({"unknown_field": ['bob@gmail.com', 'shirley@gmail.com', 'groza@pubg.com']})
df = df.rename(columns={'unknown_field': 'email'})

輸出:

    email
0   bob@gmail.com
1   shirley@gmail.com
2   groza@pubg.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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