Pandas重命名列

2024-10-01 05:03:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

CurrentDF:

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

Tags: ipbyaccessdriveinfrastructureresourceinitialactive
3条回答

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

df.columns = [col1, col2, col3]

您可以从列创建一个系列(因为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

如果每秒钟都有一列需要重命名,则可以使用:

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

相关问题 更多 >