使用 Pandas 查找两个 csv 之间的部分字符串匹配,并使用第一个 csv 的索引输出匹配结果

我想比较两个 CSV 之间的两列,找到部分字符串匹配项,然后将匹配行中的所有数据(包括列内的等效项)附加到第一个 CSV 中的正确索引处,然后在第三个 CSV 中输出编译后的匹配项,而无需编辑前两个 CSV 中的任何一个。第一个 CSV 中的所有行都必须出现在第三个中,无论是否找到匹配项,但只有第二个 CSV 中的匹配行。例如:


CSV_1                               CSV_2

Name     City     Date              Name_of_thing     City_of_Origin     Time

Examp.   Bton     7/11              huh, inc.         Lton, AMERICA  7/10/2020 00:00

Nomatch  Cton     10/10             THE EXAMPLE, LLC  Bton, USA        7/11/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

Nomatch  Cton     10/10

我早些时候在这里发帖询问模糊匹配方法(Record linking two large CSVs in Python?),但解决方案的时间效率非常低,所以我希望简单的正则表达式搜索就足够了。这些文件都非常大而且长度不一样,所以我想知道是否有一种解决方案可以有效地将 CSV_1 中的所有条目与 CSV_2 中的条目进行比较。


不幸的是,项目的限制不允许我将 CSV 加载到数据库中,这会使这变得容易得多,所以我需要完全依赖 Pandas。


四季花海
浏览 152回答 1
1回答

人到中年有点甜

只需花一点时间就可以使日期和城市保持一致。然后就是简单的左merge()import pandas as pdimport ioimport datetime as dtCSV_1 = pd.read_csv(io.StringIO(                              """Name     City     Date              Examp.   Bton     7/11              Nomatch  Cton     10/10"""), sep="\s\s+", engine="python")                 CSV_2 = pd.read_csv(io.StringIO("""Name_of_thing     City_of_Origin     Timehuh, inc.         Lton, AMERICA  7/10/2020 00:00THE EXAMPLE, LLC  Bton, USA        7/11/2020 00:00"""), sep="\s\s+", engine="python") # need to make dates consistent and joinable# need to pull city out of City_of_originCSV_3 = CSV_1.assign(    datekey=pd.to_datetime(CSV_1["Date"]+f"/{dt.date.today().year}")).merge(    CSV_2.assign(        datekey=pd.to_datetime(CSV_2["Time"]),        City=lambda dfa: dfa["City_of_Origin"].str.extract("([A-Za-z]*)")    ),    on=["datekey","City"],    how="left").drop(columns="datekey")print(CSV_3.to_string())输出      Name  City   Date     Name_of_thing City_of_Origin             Time0   Examp.  Bton   7/11  THE EXAMPLE, LLC      Bton, USA  7/11/2020 00:001  Nomatch  Cton  10/10               NaN            NaN              NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python