1

我正在使用 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 供参考,可能是导致问题的数据中的空格吗?数据以逗号分隔。

4

1 回答 1

1

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

你可以这样检查:

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
于 2016-04-23T10:26:28.010 回答