代码之家  ›  专栏  ›  技术社区  ›  user7852656

Python 3.x:Pandas数据帧如何更改特定范围的列名?

  •  2
  • user7852656  · 技术社区  · 6 年前

    我有一个大的csv文件,我正在阅读使用熊猫。以下是我的数据的一小部分。列名为0,4,6,8,10,12,14,16,18。

    0   4   6   8   10  12  14  16  18
    -2  4500    4500    4500    4500    4500    4500    4500    4500
    -1  4650    4650    4650    4650    4650    4650    4650    4650
    0   0   0   0   0   0   0   0   0
    1   0   0   0   0   0   0   0   0
    2   0   0   0   0   0   0   0   0
    3   0   0   0   0   0   0   0   0
    4   0   0   0   0   0   0   0   0
    5   0   0   0   0   0   0   0   0
    6   0   0   0   0   0   0   0   0
    7   0   0   0   0   0   0   0   0
    8   0   0   0   0   0   0   0   0
    9   0   0   0   0   0   0   0   0
    10  0   0   0   0   0   0   0   0
    11  0   0   0   0   0   0   0   0
    12  0   0   0   0   0   0   0   0
    13  0   0   0   0   0   0   0   0
    

    如果使用Data.columns,则可以更改列名。但是,我只想更改列名的一部分。例如,我想将第6、8、10列分别改为bird、dog、草莓、猕猴桃、tree、巧克力和snow。

    0   4   bird    dog strawberry  kiwi    tree    chocolate   snow
    -2  4500    4500    4500    4500    4500    4500    4500    4500
    -1  4650    4650    4650    4650    4650    4650    4650    4650
    0   0   0   0   0   0   0   0   0
    1   0   0   0   0   0   0   0   0
    2   0   0   0   0   0   0   0   0
    3   0   0   0   0   0   0   0   0
    4   0   0   0   0   0   0   0   0
    5   0   0   0   0   0   0   0   0
    6   0   0   0   0   0   0   0   0
    7   0   0   0   0   0   0   0   0
    8   0   0   0   0   0   0   0   0
    9   0   0   0   0   0   0   0   0
    10  0   0   0   0   0   0   0   0
    11  0   0   0   0   0   0   0   0
    12  0   0   0   0   0   0   0   0
    13  0   0   0   0   0   0   0   0
    

    你怎么写代码?请记住,我有一个庞大的文件,想对许多列进行大规模更改。所以我需要一行高效的代码。。。

    编辑:我想表达我想从第三列开始更改列名的愿望。

    2 回复  |  直到 6 年前
        1
  •  0
  •   It_is_Chris    6 年前

    由于要重命名从3开始的所有列,因此可以使用 zip 要创建dict,然后重命名:

    # sample data
    df = pd.DataFrame(np.random.randn(5,9), columns=[0,4,6,8,10,12,14,16,18])
    
    # create a dict using zip from df.columns[2:]
    d = dict(zip(df.columns[2:].values, ['bird','dog','strawberry','kiwi','tree','chocolate','snow']))
    
    # rename you columns
    df = df.rename(columns=d)
    
              0         4      bird       dog  strawberry      kiwi      tree  \
    0 -0.121085  1.263364 -0.008604 -0.240872    1.433633  0.092023 -0.903776   
    1  0.570377  0.565611 -1.107842  1.498852   -0.655996 -1.215298  0.639862   
    2  0.367796 -1.357311 -0.106241 -0.824072    1.055168  0.862952  0.475000   
    3  0.945560  0.359249 -0.282965  0.230909   -2.278477  1.656094 -0.031756   
    4 -0.611121 -0.159064 -0.711482  2.342169    0.044782 -0.955120  1.481766   
    
       chocolate      snow  
    0   0.607185  0.694980  
    1  -0.666239  0.208806  
    2   0.018151 -0.656670  
    3  -0.438527  0.678592  
    4   1.035624  0.537486  
    
        2
  •  0
  •   SlurpGoose    6 年前
    import pandas as pd
    
    example_list = [
        {'name' : 'a',
        'age' : 2,
        'gender' : 'm'},
        {'name' : 'b',
        'age' : 5,
        'gender' : 'm'
        }]
    df = pd.DataFrame(example_list)
    print(df)
    
    df.rename(columns = {'name':'First Name'}, inplace = True)
    print(df)
    

    输出

       age gender name
    0    2      m    a
    1    5      m    b
    
       age gender First Name
    0    2      m    a
    1    5      m    b
    

    编辑:

    import pandas as pd
    
    example_list = [
        {
            0 : 'a',
            4 : 2,
            6 : 'm'},
        {
            0 : 'b',
            4 : 5,
            6 : 'm'
        }]
    df = pd.DataFrame(example_list)
    print(df)
    
    df.rename(columns = {0:'apple', 4 : 'bannana', 6 : 'pear'}, inplace = True)
    print(df)
    

    输出:

       0  4  6
    0  a  2  m
    1  b  5  m
    
    apple  bannana pear
    0    a      2    m
    1    b      5    m