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