gpt4 book ai didi

python - Pandas DataFrame 之间的部分字符串匹配

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:09 26 4
gpt4 key购买 nike

我看过关于部分字符串匹配合并的讨论 here , here , 和其他地方,但没有关于如何在包含超字符串而不是子字符串的表上执行此操作的内容。

给定样本数据,如

df1 = pd.DataFrame({'uri': ['http://www.foo.com/index', 
'https://bar.net/directory',
'www.baz.gov/aboutus']})
df2 = pd.DataFrame({'fqdn': ['www.foo.com',
'www.qux.mil']})
print(df1)

uri
0 http://www.foo.com/index
1 https://bar.net/directory
2 www.baz.gov/aboutus
print(df2)

fqdn
0 www.foo.com
1 www.qux.mil

我的最终目标是从 df1 中删除包含 df2 中的 any 子字符串的行。在实际数据中,df1 有几百万行,df2 有几百行,df1 中的任何给定行最多只有一个子字符串在 df2 中。

鉴于示例数据,我希望最终得到这样的数据框

                         uri
0 https://bar.net/directory
1 www.baz.gov/aboutus

按照我的逻辑,中间步骤是生成

                         uri           fqdn
0 http://www.foo.com/index www.foo.com
1 https://bar.net/directory np.NaN
2 www.baz.gov/aboutus np.NaN

但我不知道如何检查 df1.apply() 中所有 df2 的值。


编辑:

虽然下面的两个答案都有效,但我通过编译正则表达式对象并使用 extract 在我的特定场景中获得了最快的结果:

import re

fqdn_list= re.compile(f"({'|'.join(df2.fqdn)})")

df1['fqdn'] = df1.uri.str.extract(fqdn_list)

最佳答案

这是您需要的吗? str.findall

df1.uri.str.findall(df2.fqdn.str.cat(sep='|')).str[0]
Out[192]:
0 www.foo.com
1 NaN
2 NaN
Name: uri, dtype: object
#df1['fqdn']=df1.uri.str.findall(df2.fqdn.str.cat(sep='|')).str[0]

关于python - Pandas DataFrame 之间的部分字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57420648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com