记录用Python链接两个大型CSV文件吗?

问题描述

我是Pandas和Python Record Linkage Toolkit的新手,所以如果答案很明显,请原谅我。我正在尝试将一个大型数据集“ CSV_1”与另一个“ CSV_2”进行交叉引用,以创建仅由匹配项组成的第三个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,USA          7/11/2020 00:00

数据结构不好,并且CSV_2的列比CSV_1的要多,这就是为什么我一直尝试基于名称列以city列作为索引块来查找模糊匹配。在使匹配阶段无法执行时遇到麻烦,没关系高效地进行处理,甚至没有解决串联步骤。对如何解决这个问题有帮助吗?

编辑:文件每个都非常大(均为100万行,每行8-20列,每行80-200mb),即使用熊猫加载单列也很麻烦。就上下文而言,这是一个用于作业应用程序的数据项目,它表示对“通过Python或R的熟悉程度”的偏爱。通常情况下,此标题不需要任何编码知识,这就是为什么我发现它如此奇怪,因此公司决定分配此复杂数据问题。参数为:在较低内存(例如2013 Dell Inspiron)环境中本地运行的单个Python文件,无需修改(即,不增加页面文件大小)。

解决方法

对于您的问题陈述,并考虑涉及的数据大小,建议将数据加载到数据库中。然后,我将使用以下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