首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫改名栏

熊猫改名栏
EN

Stack Overflow用户
提问于 2021-05-27 15:45:07
回答 3查看 329关注 0票数 3

我试图用前面的列名重命名我的列,最后加上一个数字,以使列唯一。有办法做到这一点吗?

CurrentDF:

代码语言:javascript
复制
Reconnaissance      Unnamed: 1          Resource Development    Unnamed: 3      Initial Access          Unnamed: 5  
Active Scanning     Scanning IP Blocks  Acquire Infrastructure  Botnet          Drive-by Compromise         NaN

所需:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-27 15:51:15

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

代码语言:javascript
复制
df = df.rename(columns = {df.columns[i]: f"{df.columns[i-1]}_1" for i in range(1, len(df.columns),2)})
票数 4
EN

Stack Overflow用户

发布于 2021-05-27 15:54:32

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

样本数据

代码语言:javascript
复制
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])

代码

代码语言:javascript
复制
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

代码语言:javascript
复制
print(df)

   Reconnaissance  Reconnaissance_1  Resource Development  Resource Development_1  Initial Access  Initial Access_1
0               1                 1                     1                       1               1                 1

这里还有另一个例子来说明这是如何使用间隔较少的“未命名:”列的。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2021-05-27 16:03:40

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

代码语言:javascript
复制
df.columns = [col1, col2, col3]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67725610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档