У меня есть большой набор данных, который я читаю с помощью pandas, и я хочу сделать парное выравнивание по парам2.попарительное сравнение внутри столбца pandas python Biopython
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))
это выдавало слишком много строк вывода я даже не буду пытаться разместить его здесь.
Моя идея состояла в том, чтобы сравнить значение «sequence» с строками столбца «sequence», но результат дал слишком много выравниваний, чем ожидалось. Я думаю, что двойной цикл - это не путь сюда. Я думаю, мой вопрос даже не имеет ничего общего с Biopython, просто как я могу сделать парные сравнения внутри одного столбца?