Python 自动重命名相同的标题
我正在使用Python 自动重命名相同的标题,python,pandas,Python,Pandas,我正在使用python3.7和pandas 我已成功加载我的csv文件并将标题放置在列表中 csv\u file=pandas.read\u csv(file,encoding=“ISO-8859-1”) headers=[line.upper()表示csv\u文件中的行] 但是,当我打印标题时,相同的标题都以[number]作为后缀,例如 ['ADID', 'FIRST NAME', 'LAST NAME', 'FULL NAME', 'ADID.1', 'ADID.2', 'ROLE 2',
python3.7
和pandas
我已成功加载我的csv文件并将标题放置在列表中
csv\u file=pandas.read\u csv(file,encoding=“ISO-8859-1”)
headers=[line.upper()表示csv\u文件中的行]
但是,当我打印标题时,相同的标题都以[number]作为后缀,例如
['ADID', 'FIRST NAME', 'LAST NAME', 'FULL NAME', 'ADID.1', 'ADID.2', 'ROLE 2', 'GROUP', 'DIVISION', 'TEAM', 'COMPANY']
根据输入文件,ADID
、ADID.1
和ADID.2
都应为ADID
熊猫是这样对待相同的标题的吗?是否可以关闭此功能?您的CSV文件是否有多个名为“ADID”的标题
那是行不通的。标题必须是唯一的。否则,如果您提到“ADID”列,它如何知道您谈论的是ADID、ADID.1还是ADID.2?您的CSV文件是否有多个称为“ADID”的标题
那是行不通的。标题必须是唯一的。否则,如果您提到“ADID”列,它如何知道您是在谈论ADID、ADID.1还是ADID.2?有一个名为mangle\u dupe\u cols
的选项,默认情况下该选项为True(即将重复的列设置为X,X.1,…,X.N),但该选项并不是要设置为False
正如pandas在其文档中警告的那样,“如果列中有重复的名称,传入False将导致数据被覆盖。”
来源:有一个名为mangle_dupe_cols
的选项,默认情况下该选项为True(即将重复的列设置为X,X.1,…,X.N),但该选项并不是要设置为False
正如pandas在其文档中警告的那样,“如果列中有重复的名称,传入False将导致数据被覆盖。”
来源:这是可能的,但不推荐
您可以与regex
-(\。\d+)$
一起使用:
与角色匹配。字面意思(区分大小写)
\d+匹配一个数字(等于[0-9])
+量词-在一次和无限次之间匹配,尽可能多地匹配,根据需要回馈(贪婪)
$在一行末尾断言位置
这是可能的,但不推荐
您可以与regex
-(\。\d+)$
一起使用:
与角色匹配。字面意思(区分大小写)
\d+匹配一个数字(等于[0-9])
+量词-在一次和无限次之间匹配,尽可能多地匹配,根据需要回馈(贪婪)
$在一行末尾断言位置
试图配置mangle\u dupe\u cols=False
但出现错误ValueError:不支持设置mangle\u dupe\u cols=False
。这仍然是一个持续的过程。我只做程序检查。你的目标是要找出列名中是否有任何重复项吗?我想你可以用一些杂乱的线条捕捉到重复项:test=pd.read\u csv('path/to/your/file',nrows=1,header=None)
然后assert numpy.unique(test)==test.shape[1]
如果有任何重复项试图配置mangle\u dupe\u cols=False,将引发断言错误但它给出了错误ValueError:不支持设置mangle\u dupe\u cols=False
。这仍然是一个持续的过程。我只做程序检查。你的目标是要找出列名中是否有任何重复项吗?我想你可以用一些杂乱的线条捕捉到重复项:test=pd.read\u csv('path/to/your/file',nrows=1,header=None)
然后assert numpy.unique(test)==test.shape[1]
如果存在任何重复项,则会引发断言错误;脚本将用于报告“重复”标题。以编程方式,只要头名称不跟随为true的[number]符号,就可以完成此操作;脚本将用于报告“重复”标题。以编程方式,只要标题名称不遵循[number]符号,就可以完成此操作
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: []