为了账号安全,请及时绑定邮箱和手机立即绑定

如何提取框架内的特定关键字并仅提取分隔符中的数据

如何提取框架内的特定关键字并仅提取分隔符中的数据

牛魔王的故事 2022-12-27 14:50:53
我有一列数据如下:abc|frame|gtk|enst.24|pc|hg|,abc|framex|gtk4|enst.35|pxc|h5g|,abc|frbx|hgk4|enst.23|pix|hokg|abc|frame|gtk|enst.15|pc|hg|,abc|framex|gtk2|enst.59|pxc|h5g|,abc|frbx|hgk4|enst.18|pif|homg|abc|frame|gtk|enst.98|pc|hg|,abc|framex|gtk1|enst.45|pxc|h5g|,abc|frbx|hgk4|enst.74|pig|hofg|abc|frame|gtk|enst.34|pc|hg|,abc|framex|gtk1|enst.67|pxc|h5g|,abc|frbx|hgk4|enst.39|pik|hoqg|我想在框架内搜索和提取特定关键字,并仅提取分隔符中的数据具体关键字是enst.35enst.18enst.98enst.63预期的输出是abc|framex|gtk4|enst.35|pxc|h5g|abc|frbx|hgk4|enst.18|pif|homg|abc|frame|gtk|enst.98|pc|hg|NA我在这里试过但没有有效地工作
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

您可以使用给定的构建正则表达式模式,keywords然后使用它Series.str.findall来查找所有出现的正则表达式系列:

import re


keywords = ['enst.35','enst.18','enst.98','enst.63']

pattern = '|'.join([rf'[^,]+{re.escape(k)}[^,]+'for k in keywords])

result = df['col'].str.findall(pattern).str.get(0)

#print(result)


0    abc|framex|gtk4|enst.35|pxc|h5g|

1     abc|frbx|hgk4|enst.18|pif|homg|

2        abc|frame|gtk|enst.98|pc|hg|

3                                 NaN

Name: col, dtype: object

您可以测试正则表达式模式here


查看完整回答
反对 回复 2022-12-27
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

你可以在 bashscript 中尝试如下:


for STRING in enst.35 enst.18 enst.98 enst.63; do

  tr \, \\n < file.txt | grep "$STRING" || echo NA

done


查看完整回答
反对 回复 2022-12-27
?
MM们

TA贡献1886条经验 获得超2个赞

str.extractandstr.split(',)取最后一个逗号分隔值:

df['Data2'] = df['Data'].str.extract('(^.*enst.35\|.+?\|.+?\||^.*enst.18\|.+?\|.+?\||^.*enst.98\|.+?\|.+?\||^.*enst.63\|.+?\|.+?\||)', expand=False).str.split(',').str[-1]

您可以创建一个关键字列表,并根据另一个答案进行列表理解。


查看完整回答
反对 回复 2022-12-27
  • 3 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信