[英]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.