【问题标题】:Record linking two large CSVs in Python?记录在 Python 中链接两个大型 CSV?
【发布时间】:2020-08-13 19:11:22
【问题描述】:

我对 Pandas 和 Python Record Linkage Toolkit 有点陌生,所以如果答案很明显,请原谅我。我正在尝试将一个大型数据集“CSV_1”与另一个“CSV_2”交叉引用,以便创建第三个 CSV,该 CSV 仅包含连接来自 CSV_1 和 CSV_2 的所有列的匹配项,无论是否重叠,以保留原始记录,例如

CSV_1                               CSV_2
Name     City     Date              Name_of_thing     City_of_Origin     Time
Examp.   Bton     7/11              THE EXAMPLE, LLC  Bton, USA          7/11/2020 00:00
Nomatch  Cton     10/10             huh, inc.         Lton, AMERICA      9/8/2020 00:00

会输出

CSV_3
Name     City     Date    Name_of_thing     City_of_Origin     Time
Examp.   Bton     7/11    THE EXAMPLE, LLC  Bton, USA          7/11/2020 00:00

数据的结构不是很好,CSV_2 的列比 CSV_1 多很多,这就是为什么我一直试图根据 name 列以 city 列作为索引块来查找模糊匹配。无法让匹配阶段甚至执行,更不用说高效,甚至还没有解决连接步骤。有关如何解决此问题的任何帮助?

编辑:每个文件都非常大(大约 1M 行,8-20 列,80-200mb),即使用 pandas 加载单列也很麻烦。就上下文而言,这是一个工作申请的数据项目,表明偏好“熟悉 Python 或 R”。在正常情况下,这个标题不需要任何编码知识,这就是为什么我觉得很奇怪公司决定分配这个复杂的数据问题。参数是:在较低内存(想想 2013 Dell Inspiron)环境中本地运行的单个 Python 文件,无需修改(即不增加页面文件大小)。

【问题讨论】:

  • 你看过 Practical Business Python 中的this 吗?为了匹配,您只需要完整加载目标 CSV_2 数据集;第一个可以分块处理,将生成的数据帧写入文件。
  • 这是一个很好的来源,我用作模板,我只是不知道如何交叉引用块,以便检查 CSV_1 中的所有条目与 CSV_2 中的所有条目,以及 CSV_2匹配项连接在最终结果的右侧 CSV_1 行。
  • 刚刚看到您的编辑,我会试一试,谢谢!

标签: python pandas record-linkage


【解决方案1】:

对于您的问题陈述并考虑到所涉及数据的大小,我建议将您的数据加载到数据库中。然后,我将使用以下 SQL 来解决您的问题,然后将结果读入我的本地 python env / pandas 数据框:

select *
from csv_1
inner join csv_2
on csv_1.city = csv_2.city_of_origin
where STRPOS( lower(csv_1.name) , lower(csv_2.name_of_thing) )>0
or STRPOS( lower(csv_2.name_of_thing) , lower(csv_1.name) )>0

【讨论】:

  • 不幸的是,数据库的使用不可行,解决方案需要完全可移植。就上下文而言,这是一个工作申请的数据项目,表明偏好“熟悉 Python 或 R”。在正常情况下,这个标题不需要任何编码知识,这就是为什么我觉得很奇怪公司决定分配这个复杂的数据问题。参数是:在较低内存(想想 2013 Dell Inspiron)环境中本地运行的单个 Python 文件,无需修改(即不增加页面文件大小)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 2016-04-02
  • 1970-01-01
  • 2020-11-30
相关资源
最近更新 更多