【问题标题】:pairwise comparison within a column pandas python Biopython列中的成对比较 pandas python Biopython
【发布时间】:2015-11-13 18:38:54
【问题描述】:

我有一个用 pandas 读入的大型数据集,我想通过 pairwise2 进行成对对齐。

import pandas as pd
from pandas import DataFrame
from Bio import pairwise2   #for pairwise alignments 
from Bio.pairwise2 import format_alignment   #for printing alignments out neatly 

但在这里我将使用模拟数据集:

data = { 'sequence': ['ACAAGAGTGGGACTATACAGTGGGTACAGTTATGACTTC', 'GCACGGGCCCTTGGCTAC', 'GCAACAAGGGGGGATACAGCGGGAACAGTGGACAAGTGGTTCGATGTC']}

data = DataFrame(data)

看起来像这样:

Out[34]: 
                                       sequence
0           ACAAGAGTGGGACTATACAGTGGGTACAGTTATGACTTC
1                                GCACGGGCCCTTGGCTAC
2  GCAACAAGGGGGGATACAGCGGGAACAGTGGACAAGTGGTTCGATGTC

我的目标是在“序列”列中进行成对对齐,因此第一行与第二行进行比较,然后第二行与第三行进行比较,第三行与第一行进行比较,以此类推以获得更大的数据集.

我的代码:

for seq in data['sequence']:
   for a in pairwise2.align.globalxx(seq, seq):
      print(format_alignment(*a))   #this is just to print the alignment out neatly. 

打印出来:

ACAAGAGTGGGACTATACAGTGGGTACAGTTATGACTTC
|||||||||||||||||||||||||||||||||||||||
ACAAGAGTGGGACTATACAGTGGGTACAGTTATGACTTC
Score=39

GCACGGGCCCTTGGCTAC
||||||||||||||||||
GCACGGGCCCTTGGCTAC
Score=18

GCAACAAGGGGGGATACAGCGGGAACAGTGGACAAGTGGTTCGATGTC
||||||||||||||||||||||||||||||||||||||||||||||||
GCAACAAGGGGGGATACAGCGGGAACAGTGGACAAGTGGTTCGATGTC
Score=48

这与我想要的很接近,但它仅将第一个与第一个、第二个与第二个和第三个与第三个进行比较。

所以我尝试了这个:

for seq in data['sequence']: #for each 'sequence' column value
    for index, row in data.iterrows(): #for each row 
        for a in pairwise2.align.globalxx(seq, row['sequence']): #compare 'sequence' column value to each row of the 'sequence' column
            print(format_alignment(*a))

这给出了太多的输出行,我什至不打算在这里发布它。

我的想法是将“序列”值与“序列”列的行进行比较,但输出给出的对齐方式比预期的要多。我认为双循环不是这里的路。 我想我的问题甚至与 Biopython 没有任何关系,只是我如何才能在一列中进行成对比较?

【问题讨论】:

    标签: python loops pandas biopython


    【解决方案1】:

    使用来自itertools 的组合生成器。

    for seq0, seq1 in itertools.combinations(data['sequence'], 2):
        for a in pairwise2.align.globalxx(seq0, seq1):
            print(format_alignment(*a))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多