我将Python 3.7
与pandas
一起使用。
我已经成功加载了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']
根据输入文件, ADID
,ADID.1
和ADID.2
应该全部为ADID
。
这是大熊猫如何对待相同的标头吗?可以将其关闭吗?
答案 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.replace
与regex
-(\.\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: []