【问题标题】:parsing 4 dataframe and a fasta file解析4个数据框和一个fasta文件
【发布时间】:2018-05-11 20:45:59
【问题描述】:

实际上,我有 4 个不同的数据框,对应于来自 augustus 预测的 2 个不同物种的基因信息,在这些物种中,我使用 sp1 的 sp2 训练参数和 sp1 的 sp2 训练参数训练了数据库.

这里是语法名称的示例,以便更好地理解。

0035: Lepidoptera
0042: WASP

g1.t1_0035_0035 :这个基因已经用物种0035的数据库和它自己的训练参数进行了预测。

g1.t1_0035_0042 :这个基因是用物种0035的数据库和物种0042的训练参数预测出来的。

g1.t1_0042_0042 :这个基因是用物种0042的数据库和它自己的训练参数预测出来的。

g1.t1_0042_0035 :这个基因是用物种0042的数据库和物种0035的训练参数预测出来的。

现在我有 4 个数据框:

gene_name   scaf_name       scaf_length cov_depth       GC
g3.t1       scaffold 6      56786         79            0.39
g4.t1       scaffold 6      56786         79            0.39
g1.t1       scaffold 256    789765        86            0.42
g2.t1       scaffold 890    3456          85            0.40
g5.t1       scaffold 1234   590           90            0.41

如您所见,基因名称没有带有 _number1_number2 的名称 但是每个文件都对应一个特定的情况:这里是文件名:

ggf_0042_0042.csv for all the genex_0042_0042
ggf_0042_0035.csv for all the genex_0042_0035
ggf_0035_0035.csv for all the genex_0035_0035
ggf_0042_0035.csv for all the genex_0042_0035

而我真正想要的只是解析一个fasta文件为例:

>g13600.t1_0042_0042
MERVINTQLLRYLEDHQLISDRQYGFR...
>g34744.t1_0042_0035
MSVPAHVAQIFEAIRRSGQQIDED...
>g28436.t1_0035_0042
WKKAKAENALDSYHHNHLMSEE...
>g14327.t1_0042_0042
MTYGAETWSLTVGLVRKLRVTQR...
>g30148.t1_0035_0042
MLRPVLSSKLPTNTKLRVYKTYIRSRLTY...
>g24481.t1_0035_0035
PCAGSNIKLKGTECFEKSFEVCLRNY...

然后说:

如果基因名称中有数字_0035_0035,则进入文件ggf_0035_0035.csv,并抓取与相同基因名称对应的行并用该行填充新的数据框。

这是一个假设的输出示例:

gene_name               scaf_name       scaf_length   cov_depth       GC
g345.t1_0035_0035       scaffold 567      56778         78            0.39
g23.t1_0042_0035        scaffold 43       434           79            0.43
g46.t1_0042_0042        scaffold 276      785660        87            0.41
g2.t1_0042_0035         scaffold 845      345656        87            0.40

等等……

【问题讨论】:

    标签: pandas parsing


    【解决方案1】:

    使用Biopython

    from Bio import SeqIO
    

    首先创建一个字典

    ggf = {}
    

    现在遍历记录

    for record in SeqIO.parse("example.fasta", "fasta"):
        id_ = record.id
    

    尝试匹配表格

        parts = id.split('_')
        if len(parts) != 3:
            continue
    

    查看是否已经解析,如果没有则更新

        if (parts[1], parts[2]) not in ggf:
            f_name = '_'.join('ggf', parts[1], parts[2]) + '.csv'
            ggf[(parts[1], parts[2])] = pd.read_csv(f_name)
    

    现在只需使用

        df = ggf[(parts[1], parts[2])]
        df[df.gene_name == parts[0]]
    

    【讨论】:

    • 感谢您的帮助:)
    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 2022-08-24
    • 2014-05-05
    • 2015-02-24
    • 2018-03-30
    • 1970-01-01
    相关资源
    最近更新 更多