我正在使用 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())
您可以通过在 pd.read_csv()
调用中添加 sep=r'\s*,\s*'
参数来“修复”该问题
示例:
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
关于Python Pandas 比较 CSV keyerror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36809265/