【问题标题】:Python Pandas compare CSV keyerrorPython Pandas 比较 CSV keyerror
【发布时间】:2016-04-23 09:57:16
【问题描述】:

我正在使用 Python Pandas 尝试将 CSV2 中的引用与 CSV1 中的数据进行匹配,并创建一个新的输出文件。

CSV1

reference,name,house
234 8A,john,37
564 68R,bill,3
RT4 VV8,kate,88
76AA,harry ,433

CSV2

reference
234 8A
RT4 VV8

代码

 import pandas as pd
    df1 = pd.read_csv(r'd:\temp\data1.csv')
    df2 = pd.read_csv(r'd:\temp\data2.csv')
    df3 = pd.merge(df1,df2, on= 'reference', how='inner')
    df3.to_csv('outpt.csv')

我在运行它时收到一个 keyerror 以供参考,可能是数据中的空格导致了问题吗?数据以逗号分隔。

【问题讨论】:

    标签: python csv pandas csvkit


    【解决方案1】:

    阅读 CSV 文件后,您很可能在 reference 列中有前导或尾随空格。

    你可以这样检查:

    print(df1.columns.tolist())
    print(df2.columns.tolist())
    

    您可以通过将 sep=r'\s*,\s*' 参数添加到您的 pd.read_csv() 调用来“修复”它

    例子:

    In [74]: df1
    Out[74]:
      reference    name  house
    0    234 8A    john     37
    1   564 68R    bill      3
    2   RT4 VV8    kate     88
    3      76AA  harry     433
    
    In [75]: df2
    Out[75]:
      reference
    0     234 8A
    1    RT4 VV8
    
    In [76]: df2.columns.tolist()
    Out[76]: ['reference ']
    
    In [77]: df1.columns.tolist()
    Out[77]: ['reference', 'name', 'house']
    
    In [78]: df1.merge(df2, on='reference')
    
    ...
    
    KeyError: 'reference'
    

    修复df2

    data = """\
    reference 
    234 8A
    RT4 VV8"""
    df2 = pd.read_csv(io.StringIO(data), sep=r'\s*,\s*')
    

    现在可以了:

    In [80]: df1.merge(df2, on='reference')
    Out[80]:
      reference  name  house
    0    234 8A  john     37
    1   RT4 VV8  kate     88
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 2021-03-08
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多