Python Pandas 比较 CSV keyerror

标签 python csv pandas csvkit

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

相关文章:

python - Linux 启动期间自动启动和停止 APScheduler?

python - 此字段为必填错误,但字段格式为

excel - 在VBA中将字符串文本拆分为单独的行

python - pandas 数据框切片的乘法

python - Pandas 多索引渲染

python - Django请求GET参数值列表

python - PIL 在 OpenCV 图像中产生灰色像素

javascript - 新手试图从 fastcsv 返回二维数组但返回未定义

java - BigQueryIO.Read 查询与作业 : Query

python - 在 pandas 数据框单元格中插入列表