繁体   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