簡體   English   中英

如何將列表與數據框中的列進行比較並打印列表與該列匹配的所有行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM