【问题标题】:Pandas Rename Columns熊猫重命名列
【发布时间】:2021-08-15 22:03:39
【问题描述】:

我正在尝试使用前面的列名重命名我的列,并在末尾加上一个数字,以使列独一无二。有没有办法做到这一点?

当前DF:

Reconnaissance      Unnamed: 1          Resource Development    Unnamed: 3      Initial Access          Unnamed: 5  
Active Scanning     Scanning IP Blocks  Acquire Infrastructure  Botnet          Drive-by Compromise         NaN

期望:

Reconnaissance      Reconnaissance_1        Resource Development    Resource Development_1      Initial Access          Initial Access_1
Active Scanning     Scanning IP Blocks  Acquire Infrastructure  Botnet                      Drive-by Compromise         NaN

【问题讨论】:

    标签: python pandas rename


    【解决方案1】:

    如果每隔一列需要重命名,您可以使用:

    df = df.rename(columns = {df.columns[i]: f"{df.columns[i-1]}_1" for i in range(1, len(df.columns),2)})
    

    【讨论】:

      【解决方案2】:

      您可以从列创建系列(因为Index 对象没有ffill 方法,这在此处很有用)。然后确定哪些列以Unnamed 开头,将它们屏蔽并使用 cumcount 来确定要添加到末尾的数字(在可能有多个连续的未命名:列的情况下)并使用ffill 获取上一个列标签不是以“未命名”开头的。使用此系列分配列。

      样本数据

      import pandas as pd
      import numpy as np
      
      df = pd.DataFrame(columns=['Reconnaissance', 'Unnamed: 1', 'Resource Development',    
                                 'Unnamed: 3', 'Initial Access', 'Unnamed: 5'],
                        data=1, index=[0])
      

      代码

      s = pd.Series(df.columns)
      
      s = s.mask(s.str.startswith('Unnamed:'))
      s = (s.ffill() 
           + s.groupby(s.notnull().cumsum()).cumcount().astype(str).radd('_').replace('_0', ''))
      
      df.columns = s
      

      print(df)
      
         Reconnaissance  Reconnaissance_1  Resource Development  Resource Development_1  Initial Access  Initial Access_1
      0               1                 1                     1                       1               1                 1
      

      这里是另一个例子,展示了它在不规则间隔的“未命名:”列中的表现。

      df = pd.DataFrame(columns=['a', 'Unnamed: 1', 'Unnamed: 2', 'b', 'c', 'Unnamed: 3'],
                        data=[np.arange(6)], index=[0])
      
      #### Same code as above
      
      print(df)
         a  a_1  a_2  b  c  c_1
      0  0    1    2  3  4    5
      

      【讨论】:

        【解决方案3】:

        要一次重命名所有列,您可以执行以下操作:

        df.columns = [col1, col2, col3]
        

        【讨论】:

          猜你喜欢
          • 2019-05-25
          • 2022-11-21
          • 2014-11-23
          • 2020-05-03
          • 2020-07-04
          • 2019-07-28
          • 2020-09-04
          • 1970-01-01
          相关资源
          最近更新 更多