簡體   English   中英

如何有效地在熊貓數據框中的兩列之間匹配正則表達式模式?

[英]How to match a regex pattern between two columns in pandas dataframe efficiently?

我的問題是關於有效使用正則表達式模式來查找從Excel文件提取的兩個熊貓df之間的匹配項

首先,感謝您抽出寶貴時間來研究我的問題。 我對python非常陌生,在使用它處理大型數據集時更是如此。 我知道我應該將堆棧作為最后的手段。

現在,我將腦袋撞到牆上可能很簡單的事情。

問題:我有兩個Excel文件:

一只有1列* 300行=原始網址

另一個可能很大,從20k開始,還有更多翻譯后的網址

目的:我有原始的url,我必須找到它們在大excel文件中的譯文。

這兩個網址之間唯一的共同點是網址中某處的8位數字

我曾考慮過合並,但由於它是部分匹配項(據我所知),因此無法正常工作。我發現了一個潛在的有趣解決方案: .where可以讓我完全按照自己的意願做。 但是我得到這個錯誤:

master_list [“ translated”] = crawlfr.url.where(number_search.search(master_list).group(0)== number_search.search(crawl_fr).group(0),master_list.url)TypeError:預期的字符串或緩沖區

據我所知,這個問題可能來自正則表達式,它看起來除了字符串外別無其他。

實際上,當我通過像這樣提取函數中的match對象來比較兩個字符串時,它就起作用了。

def skl_finder(master_list,crawl_fr):
    skl_search=re.compile("\d{8}")
    if skl_search.search(master_list).group(0) == 
    skl_search.search(crawl_fr).group(0):
        return skl_search.search(master_list).group(0)

我認為這個問題非常接近我想做的事情,但沒有任何答復: 熊貓:比較兩個具有相同數據結構但使用模式匹配的數據差異的數據框

import regex as re
import pandas as pd
crawl_loc="translated_file_set.xlsx"

master_list_loc="original_fileset.xlsx"

crawlfr=pd.read_excel(crawl_loc,parse_cols="E")

master_list=pd.read_excel(master_list_loc)

number_search=re.compile("\d{8}")

master_list["translated"] = 
crawlfr.url.where(number_search.search(master_list).group(0) == 
number_search.search(crawl_fr).group(0), master_list.url)


master_list.to_excel("result_file.xlsx")

確保您的url cols是dtype str

嘗試使用每個數字的8位ID創建新的cols:

crawlfr['url_id'] = crawlfr.url.str.extract("\d{8}")
master_list['url_id'] = master_list.url.str.extract("\d{8}")

然后join url_id

crawlfr.join(master_list, on='url_id')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM