【问题标题】:change index name in python在python中更改索引名称
【发布时间】:2019-06-18 15:17:42
【问题描述】:

我想将 python 中 DataFrame 中的索引名称重置为与删除第一个数字相同的名称。

例如,如果我的 DataFrame 是:

                 Sample 1                Sample 2
    2706   retinopathy positive        retinopathy negative
    2707   retinopathy negative        retinopathy negative
    2708   retinopathy positive        retinopathy positive

我希望它变成:

                Sample 1                 Sample 2
     706   retinopathy positive        retinopathy negative
     707   retinopathy negative        retinopathy negative
     708   retinopathy positive        retinopathy positive

我试过了:

ret_metadata.rename(index={2706: '706'})

但是,我想更改许多不同行的索引名称,可能是在一个循环中。有谁知道我该怎么做?

非常感谢!

【问题讨论】:

    标签: python indexing rename


    【解决方案1】:

    您可以使用this answer 中的字符串操作,方法是将其转换为字符串、切片并将其转换回 int。

    df
    
            Sample_1                Sample_2
    2706    retinopathy_positive    retinopathy_negative
    2707    retinopathy_negative    retinopathy_negative
    2708    retinopathy_positive    retinopathy_positive
    

    (如果您不关心索引是否为数字,则可以跳过第二次强制转换)

    df.index=df.index.astype(str).str[1:].astype(int)
    
    df
    
        Sample_1                Sample_2
    706 retinopathy_positive    retinopathy_negative
    707 retinopathy_negative    retinopathy_negative
    708 retinopathy_positive    retinopathy_positive
    
    df.index
    
    Int64Index([706, 707, 708], dtype='int64')
    

    【讨论】:

      【解决方案2】:

      如果您更喜欢数学解决方案(不转换为字符串),您可以这样做:

      import math
      # ...
      df.index = df.index % (pow(10, int(math.log(df.index, 10))))
      

      ...当您总是想删除第一个数字时。

      如果你想删除除了最后三位之外的所有数字,它会变得更简单:

      df.index = df.index % 1000
      

      【讨论】:

      • 非常感谢 yaccob!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2019-01-08
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      相关资源
      最近更新 更多