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