【问题标题】:pandas auto-renaming same headers熊猫自动重命名相同的标题
【发布时间】:2019-03-19 11:05:31
【问题描述】:

我正在使用 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

熊猫是这样对待相同标题的吗?可以关掉吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    有一个名为 mangle_dupe_cols 的选项默认为 True(即,将重复的列设为 X、X.1、...、X.N)但此选项并不完全意味着设置为 False。

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

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

    【讨论】:

    • 试图配置mangle_dupe_cols=False,但它给出了错误ValueError: Setting mangle_dupe_cols=False is not supported yet。它仍然是一个持续的issue。我只会做程序检查。
    • 您的目标是查找列名中是否有重复项?
    • 我猜你可以用一些凌乱的线条来捕捉重复的内容:test = pd.read_csv('path/to/your/file', nrows=1, header=None) 然后assert numpy.unique(test) == test.shape[1] 如果有任何重复,则会引发断言错误
    【解决方案2】:

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

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

    【讨论】:

    • 这是真的;脚本将用于报告“重复”标题。以编程方式,只要 header names 不遵循 .[number] 表示法,就可以做到这一点
    【解决方案3】:

    可以,但不推荐。

    您可以使用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: []
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 2021-08-15
      • 2019-03-15
      • 2021-11-24
      • 2019-07-28
      • 2019-05-25
      • 2016-12-23
      相关资源
      最近更新 更多