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

Python修剪数据帧的多个列名

  •  0
  • Mainland  · 技术社区  · 4 年前

    我有20列的数据框。它们都有一个共同的文本和序列号。我想修剪文本部分并缩短名称。下面是一个例子:

    xdf = pd.DataFrame({'Column1':[10,20],'Column2':[80,90]})
    
       Column1  Column2
    0       10       80
    1       20       90
    

    预期产出:

            C1       C2
    0       10       80
    1       20       90
    

    解决方案1:

    oldcols = ['Column1','Column2']
    newcols = ['C1','C2']
    xdf.rename(columns=dict(zip(oldcols,newcols)),inplace=True)
    
            C1       C2
    0       10       80
    1       20       90
    

    解决方案2:

    for i in range(len(oldcols)):
        xdf.rename(columns={'%s'%(xdf[i]):'%s'%(xdf[i].replace('Column','C'))},inplace=True)
    
    raise KeyError(key) from err
    

    解决方案1很好,但我必须准备一个新旧列名列表。相反,我希望遍历每个列名并替换列文本。然而,解决方案2不起作用。

    1 回复  |  直到 4 年前
        1
  •  1
  •   enke    4 年前

    你可以用 str.findall 在列上拆分为文本和数字;然后使用列表理解,只取第一个字母,并将其与每个列名称的数字连接起来:

    xdf.columns = [x[0]+y for li in xdf.columns.str.findall(r'([A-Za-z]+)(\d+)') for x,y in li]
    

    输出:

       C1  C2
    0  10  80
    1  20  90