Python Pandas比较CSV keyerror

时间:2016-04-23 09:57:16

标签: python csv pandas csvkit

我正在使用Python Pandas尝试将CS​​V2中的引用与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

CODE

 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供参考,它可能是造成问题的数据中的空格吗?数据以逗号分隔。

1 个答案:

答案 0 :(得分: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