我正在嘗試根據它們是否在參考串列中過濾我獲得的基因串列。我查看了這些問題,這些問題很有幫助,但它們并沒有幫助我解決我遇到的問題(if/else in a list comprehension, List comprehension with else pass,if pass and if continue in python,Remove出現在另一個串列中的所有元素)。特別是最后一個問題的一些答案似乎非常有幫助,但它們似乎不適用于我的資料。
我試圖簡化我正在做的事情,這是我現在擁有的一個小玩具示例:
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
uj5u.com熱心網友回復:
如果您的資料型別是 Pandas 系列,那么您可以使用 'iteritems()' 而不是 'iterrows()',如下所示:
diff_expressed_tf = [gene for index, gene in genes_9.iteritems() if gene in head]
uj5u.com熱心網友回復:
Python 串列沒有“頭”方法。相反,請嘗試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你的基因在哪一列中命名
。
否則,您的代碼看起來不錯。
uj5u.com熱心網友回復:
由于您使用的是 Pandas DataFrame,因此在沒有 for 回圈的情況下執行操作要快得多。
您可以使用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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416334.html
標籤:
