這是一個艱難的。
問題介紹:
我正在處理兩個不同的檔案:一個GFF3,它基本上是一個“9 列” TSV,一個FASTA,它是一個文本檔案。現在,使用它匯入 GFF3 檔案gffpandas如下所示:
seq_id source type start end score strand phase attributes
1 ctg.s1.000000F_arrow prokka gene 56.0 244.0 . . NHDIEHOJ_00001
3 ctg.s1.000000F_arrow prokka gene 902.0 2167.0 . - . NHDIEHOJ_00002
5 ctg.s1.000001F_arrow prokka gene 2363.0 2905.0 . - . NHDIEHOJ_00003
7 ctg.s1.000003F_arrow prokka gene 2916.0 3947.0 . - . NHDIEHOJ_00004
9 ctg.s2.000000F_arrow prokka gene 4353.0 5174.0 . . NHDIEHOJ_00005
洗掉seq_id列我得到以下“值”:
ctg.s1.000000F_arrow
ctg.s1.000001F_arrow
ctg.s1.000003F_arrow
ctg.s2.000000F_arrow
現在讓我們進入FASTA檔案,它看起來像這樣:
>ctg.s1.000000F_arrow
CCGGAACATCGTCCTCATCCGCAAAGTCGAGCTCTGCCTCGATCATTGCACGCGAATGGGTCAGCCGTCGGGCCCAACCG
GCATAGAGTGCGGACTGTCCGCCACCGGACTGCTCTATGGCGAGACGACGCTGCATTTCCGTTTCTGCCGCAATCAGGTC
>ctg.s1.000001F_arrow
ACGCCGGCTGCAACTTTGAGAAGATGTGGCGATGTCGACCGCTGCATCCCGCCCTTCTCTGCAGAATTTTCCAGCTGTCC
GAGGACATTGGCAAAAAGGCCCTTGGAATCCTTGCGGCTCATTCTCTCCCCCATGCCTTCCAGAAGAGGCCCTCGAGTTC
>ctg.s1.000003F_arrow
GGCGCTGGTTTTCCCCGACACCTCGCCGCGCGGCGAGGGCGTGGCTGACGACGAGGCTTATGATCTCGGTCAGGGTGCGG
GCTTCTATGTCAATGCGACGCAGAAGCCCTGGTCGCCGCACTATCGCATGTATGATTATATCGTCACCGAATTGCCCGCC
>ctg.s2.000000F_arrow
GCGCTCGACGGCATGCCCGTACGCGGCCGATCCTGCGCCGCTTCCTTAACCTTAGCTGCGGATGGAAAGTCGTCCTCGGA
GTTCGGCTCGCAAACGCTTTCGAGCGCGCAATTGACGACGATGTCGTACCCAACTTAGATCGCCGAACGCCATGAGGTCG
假設大寫的文本部分比兩行長得多,可以看到,以“>”符號為特征的文本部分呈現出與seq_idGFF3 列相同的值。事實上,我寫了幾行來為FASTA檔案分配一個字典,其中“key”是以“>”符號為特征的文本部分,“item”是大寫部分。
問題處理
attributes對于資料幀內的每個值,都有一個對應的start和end值,它是對應的間隔seq_id。我想從FASTA檔案中提取確切的間隔,但相對于所seq_id參考的值。我的意思是間隔 56-244 必須僅搜索FASTA序列ctg.s1.000000F_arrow以及 902-2167。最終目標是獲得一個資料幀,該資料幀具有額外的第 10 列(例如“序列”),其中包含間隔的相應FASTA序列,如下所示:
seq_id source type start end score strand phase attributes sequence
1 ctg.s1.000000F_arrow prokka gene 56.0 244.0 . . NHDIEHOJ_00001 CCGGAACATCGTCCTCATCCG
3 ctg.s1.000000F_arrow prokka gene 902.0 2167.0 . - . NHDIEHOJ_00002 CAAGGACATCGTGATCAATTC
5 ctg.s1.000001F_arrow prokka gene 2363.0 2905.0 . - . NHDIEHOJ_00003 TCGCCGCGCGGCGAGTGATTA
7 ctg.s1.000003F_arrow prokka gene 2916.0 3947.0 . - . NHDIEHOJ_00004 TCGAGCGCGCAATTGACGACG
9 ctg.s2.000000F_arrow prokka gene 4353.0 5174.0 . . NHDIEHOJ_00005 AGATCGCCGAACGCCATATTT
注意 序列中的序列sequence是隨機輸入的,長度相同,但與每個值的end-維度成比例地不同。startattributes
我希望我在解釋中很清楚。謝謝大家的幫助。
uj5u.com熱心網友回復:
假設dfDataFrame 和dic字典以及序列索引從 1 開始(而不是 0 像 python 索引):
df['sequence'] = [dic[k][int(i-1):int(j)] for k, i, j in
zip(df['seq_id'], df['start'], df['end'])]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516078.html
上一篇:將多索引轉換為3dnumpy陣列
