Python Pandas 比较 CSV keyerror

Python Pandas compare CSV keyerror

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

我在 运行 时收到一个供参考的键盘错误,是否是数据中的空格导致了这个问题?数据以逗号分隔。

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

你可以这样查看:

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

您可以 "fix" 通过将 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