Renaming columns in pandas

前端 未结 27 2585
野性不改
野性不改 2020-11-21 07:05

I have a DataFrame using pandas and column labels that I need to edit to replace the original column labels.

I\'d like to change the column names in a DataFrame

27条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-21 07:21

    RENAME SPECIFIC COLUMNS

    Use the df.rename() function and refer the columns to be renamed. Not all the columns have to be renamed:

    df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
    # Or rename the existing DataFrame (rather than creating a copy) 
    df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)
    

    Minimal Code Example

    df = pd.DataFrame('x', index=range(3), columns=list('abcde'))
    df
    
       a  b  c  d  e
    0  x  x  x  x  x
    1  x  x  x  x  x
    2  x  x  x  x  x
    

    The following methods all work and produce the same output:

    df2 = df.rename({'a': 'X', 'b': 'Y'}, axis=1)  # new method
    df2 = df.rename({'a': 'X', 'b': 'Y'}, axis='columns')
    df2 = df.rename(columns={'a': 'X', 'b': 'Y'})  # old method  
    
    df2
    
       X  Y  c  d  e
    0  x  x  x  x  x
    1  x  x  x  x  x
    2  x  x  x  x  x
    

    Remember to assign the result back, as the modification is not-inplace. Alternatively, specify inplace=True:

    df.rename({'a': 'X', 'b': 'Y'}, axis=1, inplace=True)
    df
    
       X  Y  c  d  e
    0  x  x  x  x  x
    1  x  x  x  x  x
    2  x  x  x  x  x
     
    

    From v0.25, you can also specify errors='raise' to raise errors if an invalid column-to-rename is specified. See v0.25 rename() docs.


    REASSIGN COLUMN HEADERS

    Use df.set_axis() with axis=1 and inplace=False (to return a copy).

    df2 = df.set_axis(['V', 'W', 'X', 'Y', 'Z'], axis=1, inplace=False)
    df2
    
       V  W  X  Y  Z
    0  x  x  x  x  x
    1  x  x  x  x  x
    2  x  x  x  x  x
    

    This returns a copy, but you can modify the DataFrame in-place by setting inplace=True (this is the default behaviour for versions <=0.24 but is likely to change in the future).

    You can also assign headers directly:

    df.columns = ['V', 'W', 'X', 'Y', 'Z']
    df
    
       V  W  X  Y  Z
    0  x  x  x  x  x
    1  x  x  x  x  x
    2  x  x  x  x  x
    

提交回复
热议问题