亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Pandas 查找兩個 csv 之間的部分字符串匹配,并使用第一個 csv 的索引輸出匹配結果

使用 Pandas 查找兩個 csv 之間的部分字符串匹配,并使用第一個 csv 的索引輸出匹配結果

四季花海 2023-05-23 16:52:37
我想比較兩個 CSV 之間的兩列,找到部分字符串匹配項,然后將匹配行中的所有數據(包括列內的等效項)附加到第一個 CSV 中的正確索引處,然后在第三個 CSV 中輸出編譯后的匹配項,而無需編輯前兩個 CSV 中的任何一個。第一個 CSV 中的所有行都必須出現在第三個中,無論是否找到匹配項,但只有第二個 CSV 中的匹配行。例如:CSV_1                               CSV_2Name     City     Date              Name_of_thing     City_of_Origin     TimeExamp.   Bton     7/11              huh, inc.         Lton, AMERICA  7/10/2020 00:00Nomatch  Cton     10/10             THE EXAMPLE, LLC  Bton, USA        7/11/2020 00:00會顯示為CSV_3Name     City     Date    Name_of_thing     City_of_Origin     TimeExamp.   Bton     7/11    THE EXAMPLE, LLC  Bton, USA          7/11/2020 00:00Nomatch  Cton     10/10我早些時候在這里發帖詢問模糊匹配方法(Record linking two large CSVs in Python?),但解決方案的時間效率非常低,所以我希望簡單的正則表達式搜索就足夠了。這些文件都非常大而且長度不一樣,所以我想知道是否有一種解決方案可以有效地將 CSV_1 中的所有條目與 CSV_2 中的條目進行比較。不幸的是,項目的限制不允許我將 CSV 加載到數據庫中,這會使這變得容易得多,所以我需要完全依賴 Pandas。
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

只需花一點時間就可以使日期和城市保持一致。然后就是簡單的左merge()


import pandas as pd

import io

import datetime as dt


CSV_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     Time

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

THE 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_origin

CSV_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             Time

0   Examp.  Bton   7/11  THE EXAMPLE, LLC      Bton, USA  7/11/2020 00:00

1  Nomatch  Cton  10/10               NaN            NaN              NaN


查看完整回答
反對 回復 2023-05-23
  • 1 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號