通过关键词搜索并在定界符中提取短语

问题描述 投票:0回答:2

我具有如下列数据:

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.35
enst.18
enst.98
enst.63

预期输出是

abc|framex|gtk4|enst.35|pxc|h5g|
abc|frbx|hgk4|enst.18|pif|homg|
abc|frame|gtk|enst.98|pc|hg|
NA

如果找不到匹配项,请在输出列中填充NA我尝试了此here,但无法有效运行。我们可以用bash脚本来做到这一点吗?

我具有以下列数据: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 | ...] >>

另一种方式:

for NUM in 35 18 98 63; do
  tr \, \\n < file.txt | grep "enst.$NUM" || echo NA
done

输出结果:

abc|framex|gtk4|enst.35|pxc|h5g|
abc|frbx|hgk4|enst.18|pif|homg|
abc|frame|gtk|enst.98|pc|hg|
NA
    

由于已标记熊猫,您可以先输入str.split,然后输入explode,然后再输入str.contains + reindex以获得缺失行中的NaN

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

s = df['Column'].str.split(',').explode()
s[s.str.contains('|'.join(keywords))].reindex(df.index)

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: Column, dtype: object

注意:用原始列名替换代码中的Column

pandas bash awk
2个回答
0
投票

另一种方式:


0
投票

由于已标记熊猫,您可以先输入str.split,然后输入explode,然后再输入str.contains + reindex以获得缺失行中的NaN

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

s = df['Column'].str.split(',').explode()
s[s.str.contains('|'.join(keywords))].reindex(df.index)
© www.soinside.com 2019 - 2024. All rights reserved.