【问题标题】:Change dataframe row names更改数据框行名称
【发布时间】:2016-10-17 02:31:10
【问题描述】:

我有一个看起来像这样的 df:

BBG.LON.123.S_CAR_ADJ_DPS    343.94325
BBG.LON.436.S_CAR_ADJ_DPS    236.51530

我正在尝试重命名行名(删除每个行名的 '_CAR_ADJ_DPS' 元素并重命名列 'id' 所以我得到的 df 看起来像:

           id
BBG.LON.123.S   343.94325
BBG.LON.436.S   236.51530

我尝试使用以下行但没有成功:

pd.DataFrame(pd.Series(np.unique([row.split('_')[0] for row in df.rows]), name='id'))

接下来我可以尝试什么?

【问题讨论】:

    标签: python pandas dataframe split rename


    【解决方案1】:

    我认为您可以将str.splitrename_axis 一起使用(pandas 0.18.0 中的新功能):

    print (df)
                                       a
    BBG.LON.123.S_CAR_ADJ_DPS  343.94325
    BBG.LON.436.S_CAR_ADJ_DPS  236.51530
    
    df.index = df.index.str.split('_').str[0]
    df = df.rename_axis('id')
    #if use pandas bellow 0.18.0
    #df.index.name = 'id'
    
    print (df)
                           a
    id                      
    BBG.LON.123.S  343.94325
    BBG.LON.436.S  236.51530
    

    【讨论】:

      【解决方案2】:

      您可能还对str.extract 感兴趣,以将条目提取为列:

      In [11]: df[0].str.extract('(?P<A>.*)\.(?P<B>.*)\.(?P<C>\d+)\.(?P<D>.)_.*', expand=True)
      Out[11]:
           A    B    C  D
      0  BBG  LON  123  S
      1  BBG  LON  436  S
      

      【讨论】:

        猜你喜欢
        • 2021-08-28
        • 2022-01-03
        • 2015-09-22
        • 2021-02-15
        • 1970-01-01
        • 2018-01-12
        • 2018-02-23
        • 2021-03-29
        • 1970-01-01
        相关资源
        最近更新 更多