另一种方式:
我具有如下列数据:
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
。
另一种方式:
由于已标记熊猫,您可以先输入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)