熊猫数据框列表部分字符串匹配python [重复]
Posted
技术标签:
【中文标题】熊猫数据框列表部分字符串匹配python [重复]【英文标题】:pandas dataframe list partial string matching python [duplicate] 【发布时间】:2016-10-18 06:14:01 【问题描述】:我有一个数据框df
:
df:
chr gene_name
0 1 ARF3
1 1 ABC
2 1 ARF3, ENSG123
3 1 ENSG,ARF3
4 1 ANG
5 2 XVY
6 2 PQR
7 3 RST
8 4 TAC
还有一个基因列表
gene_list = ['ARF3','ABC' ]
现在,我需要从数据框 (df
) 中获取基因名称与 gene_list
中的元素完全匹配的行。
所以,我尝试了:
df2 = df1[df.gene_name.isin(gene_list)]
我检索到:
chr gene_name
0 1 ARF3
1 1 ABC
但我期待的是:
chr gene_name
0 1 ARF3
1 1 ABC
2 1 ARF3, ENSG123
3 1 ENSG,ARF3
所以基本上数据框中的所有行,其中gene_list
中的元素是数据框中gene_name
的子字符串。
我曾想过使用.contains()
,如果我正在寻找另一种方式,即数据框中的gene_name
将是gene_list
中元素的子字符串。
感谢所有帮助
【问题讨论】:
【参考方案1】:您可以将contains
与join
一起使用所有值与|
(or
):
gene_list = ['ARF3','ABC' ]
print ('|'.join(gene_list))
ARF3|ABC
print (df.gene_name.str.contains('|'.join(gene_list)))
0 True
1 True
2 True
3 True
4 False
5 False
6 False
7 False
8 False
Name: gene_name, dtype: bool
df2 = df[df.gene_name.str.contains('|'.join(gene_list))]
print (df2)
chr gene_name
0 1 ARF3
1 1 ABC
2 1 ARF3,ENSG123
3 1 ENSG,ARF3
【讨论】:
嗯,如果您只需要过滤器值,此解决方案效果很好。它是如何工作的? 这个解决方法有问题吗?我可以删除它吗?以上是关于熊猫数据框列表部分字符串匹配python [重复]的主要内容,如果未能解决你的问题,请参考以下文章