尝试根据元素是否在 Python 中的另一个列表中来过滤一个列表
Trying to filter one list according to whether elements are in another list in Python
我正在尝试根据它们是否在参考列表中来过滤我获得的基因列表。我看过这些问题,它们很有帮助,但它们并没有帮助我解决我遇到的问题 (if/else in a list comprehension,
, if pass and if continue in python, Remove all the elements that occur in one list from another)。特别是最后一个问题的一些答案似乎很有帮助,但它们似乎不适用于我的数据。
我试图简化我正在做的事情,这是我现在的一个小玩具示例:
head = genes_9.head()
diff_expressed_tf = [gene for gene in genes_9 if gene in head]
diff_expressed_tf
# This returns
[]
我在想,如果我能让它与“genes_9.head()”一起工作,它应该与我的实际参考数据一起工作。
有人能帮我重写这个来做我想让它做的事吗?或者,如果有人可以指出其他相关问题,我也将不胜感激。
作为参考,这里是我的一小段数据:
genes_9.head(10)
0 Tnfrsf4
2 Tnfrsf18
14 Il2ra
5 Odc1
7 Foxp3
36 Ctla4
3 Ikzf2
1 Cd5
8 Ccr8
24 Tnfrsf9
Python 列表没有“head”方法。相反,尝试 genes_9[0:10]
列表中的前 10 个元素。
如果您使用的是 Pandas DataFrame,则可以使用 iterrows()
方法遍历行。例如:
diff_expressed_tf = [gene[gene_column] for index, gene in genes_9.iterrows() if gene in head]
其中 gene_column
是您的基因在哪一列中命名。
否则,您的代码看起来没问题。
如果您的数据类型是 Pandas 系列,那么您可以使用 'iteritems()' 而不是 'iterrows()',如下所示:
diff_expressed_tf = [gene for index, gene in genes_9.iteritems() if gene in head]
由于您使用的是 Pandas DataFrame,因此在没有 for 循环的情况下执行操作要快得多。
您可以 select 使用 pandas.DataFrame.isin
头部的数据框行
result = genes_9[genes_9['Tnfrsf4'].isin(head['Tnfrsf4'])]
例子
data = '''0 Tnfrsf4
2 Tnfrsf18
14 Il2ra
5 Odc1
7 Foxp3
36 Ctla4
3 Ikzf2
1 Cd5
8 Ccr8
24 Tnfrsf9'''
genes_9 = pd.read_csv(StringIO(data), sep = "\s+")
head = genes_9.head(5) # Use first 5 rows as head
result = genes_9[genes_9['Tnfrsf4'].isin(head['Tnfrsf4'])]
print(result) # Output is the rows of head
0 Tnfrsf4
0 2 Tnfrsf18
1 14 Il2ra
2 5 Odc1
3 7 Foxp3
4 36 Ctla4
我正在尝试根据它们是否在参考列表中来过滤我获得的基因列表。我看过这些问题,它们很有帮助,但它们并没有帮助我解决我遇到的问题 (if/else in a list comprehension,
我试图简化我正在做的事情,这是我现在的一个小玩具示例:
head = genes_9.head()
diff_expressed_tf = [gene for gene in genes_9 if gene in head]
diff_expressed_tf
# This returns
[]
我在想,如果我能让它与“genes_9.head()”一起工作,它应该与我的实际参考数据一起工作。
有人能帮我重写这个来做我想让它做的事吗?或者,如果有人可以指出其他相关问题,我也将不胜感激。
作为参考,这里是我的一小段数据:
genes_9.head(10)
0 Tnfrsf4
2 Tnfrsf18
14 Il2ra
5 Odc1
7 Foxp3
36 Ctla4
3 Ikzf2
1 Cd5
8 Ccr8
24 Tnfrsf9
Python 列表没有“head”方法。相反,尝试 genes_9[0:10]
列表中的前 10 个元素。
如果您使用的是 Pandas DataFrame,则可以使用 iterrows()
方法遍历行。例如:
diff_expressed_tf = [gene[gene_column] for index, gene in genes_9.iterrows() if gene in head]
其中 gene_column
是您的基因在哪一列中命名。
否则,您的代码看起来没问题。
如果您的数据类型是 Pandas 系列,那么您可以使用 'iteritems()' 而不是 'iterrows()',如下所示:
diff_expressed_tf = [gene for index, gene in genes_9.iteritems() if gene in head]
由于您使用的是 Pandas DataFrame,因此在没有 for 循环的情况下执行操作要快得多。
您可以 select 使用 pandas.DataFrame.isin
头部的数据框行result = genes_9[genes_9['Tnfrsf4'].isin(head['Tnfrsf4'])]
例子
data = '''0 Tnfrsf4
2 Tnfrsf18
14 Il2ra
5 Odc1
7 Foxp3
36 Ctla4
3 Ikzf2
1 Cd5
8 Ccr8
24 Tnfrsf9'''
genes_9 = pd.read_csv(StringIO(data), sep = "\s+")
head = genes_9.head(5) # Use first 5 rows as head
result = genes_9[genes_9['Tnfrsf4'].isin(head['Tnfrsf4'])]
print(result) # Output is the rows of head
0 Tnfrsf4
0 2 Tnfrsf18
1 14 Il2ra
2 5 Odc1
3 7 Foxp3
4 36 Ctla4