熊猫自动重新命名相同的标题

时间:2018-10-15 04:05:01

标签: python pandas

我将Python 3.7pandas一起使用。

我已经成功加载了csv文件,并将标头放置在列表中

csv_file = pandas.read_csv(file, encoding="ISO-8859-1")
headers = [line.upper() for line in csv_file]

但是,当我打印headers时,相同的标题后缀有。[number] ,例如

['ADID', 'FIRST NAME', 'LAST NAME', 'FULL NAME', 'ADID.1', 'ADID.2', 'ROLE 2', 'GROUP', 'DIVISION', 'TEAM', 'COMPANY']  
根据输入文件,

ADIDADID.1ADID.2应该全部为ADID

这是大熊猫如何对待相同的标头吗?可以将其关闭吗?

3 个答案:

答案 0 :(得分:2)

您的CSV文件是否有多个标题为“ ADID”的标题?

那是行不通的。标头必须是唯一的。否则,如果您引用“ ADID”列,那么它如何知道您是在谈论ADID还是ADID.1或ADID.2?

答案 1 :(得分:2)

有一个名为mangle_dupe_cols的选项,默认情况下为True(即,将重复的列设置为X,X.1,...,X.N),但是此选项并非完全旨在设置为False。

正如熊猫在其文档中警告的那样,“如果列中重复的名称,则传入False将导致数据被覆盖。”

来源:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

答案 2 :(得分:1)

可能,但不建议。

您可以将str.replaceregex-(\.\d+)$一起使用:

  

与字符匹配。从字面上看(区分大小写)
   \ d + 匹配一个数字(等于[0-9])
   + 量词-匹配一次和无限次,次数尽可能多,并根据需要返回(贪婪)
   $ 在行尾声明位置


c = ['ADID', 'FIRST NAME', 'LAST NAME', 'FULL NAME', 
     'ADID.1', 'ADID.2', 'ROLE 2', 'GROUP', 'DIVISION', 'TEAM', 'COMPANY']  
df = pd.DataFrame(columns=c)

df.columns = df.columns.str.replace('(\.\d+)$','')
print (df)
Empty DataFrame
Columns: [ADID, FIRST NAME, LAST NAME, FULL NAME, 
          ADID, ADID, ROLE 2, GROUP, DIVISION, TEAM, COMPANY]
Index: []