[英]How to compare a list to a column in a data frame and print all rows where the list matches the column
我有一個數據框,其中一列列出了與我的基因突變相關的基因(最后一列)。
0 chr1 6667742 T TTC HIGH frameshift_variant DNAJC11
1 chr1 8360467 G GC HIGH frameshift_variant RERE
2 chr1 10658519 T A MODERATE missense_variant CASZ1
3 chr1 12892965 T G MODERATE missense_variant PRAMEF10
4 chr1 14599118 AGCG A MODERATE conservative_inframe_deletion KAZN
.. ... ... ... ... ... ... ...
443 chrX 131273813 G C MODERATE missense_variant IGSF1
444 chrX 141003622 A G MODERATE missense_variant SPANXB1
445 chrX 152919025 CGAGGAG C MODERATE disruptive_inframe_deletion ZNF185
446 chrX 152919025 CGAGGAG C MODERATE sequence_feature ZNF185
447 chrY 12722134 CA C HIGH frameshift_variant USP9Y
我還有一個基因列表,我想看看我的數據框是否包含。 我已經能夠將我的基因列表與我的數據框進行比較並打印匹配的基因。 但是,我現在要做的是讓腳本打印出匹配發生的整個行,以便我擁有與該匹配相關的所有信息。
我使用分離出包含與每個基因突變相關的基因的列。
gene_column=data_frame.iloc[:,6]
並將其與我感興趣的基因列表進行比較,該列表是我從 txt 文件中輸入的。
genes_of_interest_txt = open(r'E:\bcf_analysis\gene_list\met_associated_genes_new_line.txt', "r") #opens my list of genes written as each item on a new line
genes_of_interest = genes_of_interest_txt.read() #reads next file
genes_of_interest_list = genes_of_interest.split ("\n") #makes text file a list
然后我使用這些嵌套的 for 循環找到了所有匹配項。
for i in genes_of_interest_list:
for num in gene_column:
if num == i:
現在我想弄清楚如何打印與匹配相關的整行。 我正在嘗試構建一個標記系統來標記匹配的行,然后選擇所有標記行並將它們輸出到一個新的 .csv 文件中。
length_of_dataframe = 449
match_flag = np.zeros((length_of_file, 1), dtype=int, order='C')
num = int(0)
for i in genes_of_interest_list:
for num in gene_column:
if num == i :
match_flag[num]= 1
print (match_flag)
我收到以下錯誤。
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
我完全不擅長編碼,所以如果你有更好的方法,請告訴我。
注意:我使用的是 numpy 和 pandas 庫。
不確定我是否遵循您的要求。 但你的意思是這樣的嗎? 然而,這意味着將您的數據框轉換為文本。 也許這不是一個選擇。
代碼:
text = '''0 chr1 6667742 T TTC HIGH frameshift_variant DNAJC11
1 chr1 8360467 G GC HIGH frameshift_variant RERE
2 chr1 10658519 T A MODERATE missense_variant CASZ1
3 chr1 12892965 T G MODERATE missense_variant PRAMEF10
4 chr1 14599118 AGCG A MODERATE conservative_inframe_deletion KAZN
.. ... ... ... ... ... ... ...
443 chrX 131273813 G C MODERATE missense_variant IGSF1
444 chrX 141003622 A G MODERATE missense_variant SPANXB1
445 chrX 152919025 CGAGGAG C MODERATE disruptive_inframe_deletion ZNF185
446 chrX 152919025 CGAGGAG C MODERATE sequence_feature ZNF185
447 chrY 12722134 CA C HIGH frameshift_variant USP9Y'''
split_text = text.split('\n') #split by rows
print('first example:')
for line in split_text:
if "KAZN" in line:
print(line)
print('\n')
check_this = ['KAZN', 'ZNF185']
print('second example:')
for line in split_text:
if any(x in line for x in check_this):
print(line)
輸出:
first example:
4 chr1 14599118 AGCG A MODERATE conservative_inframe_deletion KAZN
second example:
4 chr1 14599118 AGCG A MODERATE conservative_inframe_deletion KAZN
445 chrX 152919025 CGAGGAG C MODERATE disruptive_inframe_deletion ZNF185
446 chrX 152919025 CGAGGAG C MODERATE sequence_feature ZNF185
[Program finished]
如果找到匹配項,則在行中查找短語並打印該行,如第一個示例中所示。
第二個示例從短語列表中查找匹配項。
如果我沒記錯的話,您只是想將包含所有匹配基因的數據框保存到 csv 文件中? 在這種情況下,您可以先進行列表推導以獲取匹配基因的列表,然后使用它們查找您的數據框。
matched_list = [num/i for i in genes_of_interest_list for num in gene_column if num == i]
# I'm not sure which one expected output, you can change the `num` or `i` according to what you want
new_df = data_frame[data_frame['Your last column name'].isin(matched_list)]
new_df.to_csv("some_file_name.csv", index = None)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.