我的数据集还有另一个问题。基本上,有一个具有相关特征的基因列表,包括位置麻木(第 3 和 4 列)和链方向(+ 或 -)。我正在尝试对位置进行计算,以使它们相对于每个基因的起始密码子类型(第二列),而不是整个基因组(就像现在一样)。问题是,计算只在 + STRAND 序列上执行, - STRAND 序列没有出现在输出中。下面是数据集、我的代码、输出以及我尝试过的示例。
这是数据集:
GENE_ID TYPE POS1 POS2 STRAND
PITG_00002 start_codon 10520 10522 -
PITG_00002 stop_codon 10097 10099 -
PITG_00002 exon 10474 10522 -
PITG_00002 CDS 10474 10522 -
PITG_00002 exon 10171 10433 -
PITG_00002 CDS 10171 10433 -
PITG_00002 exon 10097 10114 -
PITG_00002 CDS 10100 10114 -
PITG_00003 start_codon 38775 38777 +
PITG_00003 stop_codon 39069 39071 +
PITG_00003 exon 38775 39071 +
PITG_00003 CDS 38775 39068 +
这是代码:
import numpy
import pandas
import pandas as pd
import sys
sys.stdout = open("outtry2.txt", "w")
data = pd.read_csv('pinfestans-edited2.csv', sep='\t')
groups = data.groupby(['STRAND', 'GENE_ID'])
corrected = []
for (direction, gene_name), group in groups:
##print direction,gene_name
if group.index[group.TYPE=='start_codon']:
start_exon = group.index[group.TYPE=='exon'][0]
if direction == '+':
group['POSA'] = 1 + abs(group.POS1 - group.POS1[start_exon])
group['POSB'] = 1 + abs(group.POS2 - group.POS1[start_exon])
else:
group['POSA'] = 1 - abs(group.POS2 - group.POS2[start_exon])
group['POSB'] = 1 - abs(group.POS1 - group.POS2[start_exon])
##print group
corrected.append(group)
以下是输出示例:
+ PITG_00003
GENE_ID TYPE POS1 POS2 STRAND POSA POSB
8 PITG_00003 start_codon 38775 38777 + 1 3
9 PITG_00003 stop_codon 39069 39071 + 295 297
10 PITG_00003 exon 38775 39071 + 1 297
11 PITG_00003 CDS 38775 39068 + 1 294
以前我得到一个数组值错误(制表符分隔的数据集 ValueError 具有多个元素的数组的真相是模棱两可的错误),但这已经得到了解决。所以接下来我尝试只做这部分:
import numpy
import pandas
import pandas as pd
import sys
##sys.stdout = open("outtry2.txt", "w")
data = pd.read_csv('pinfestans-edited2.csv', sep='\t')#,
#converters={'STRAND': lambda s: s[0]})
groups = data.groupby(['STRAND', 'GENE_ID'])
corrected = []
for (direction, gene_name), group in groups:
print direction,gene_name
并且输出打印出所有 GENE_ID 和它们的 STRAND 符号(+ 或 -),并且它对 + 和 - 序列都执行了此操作。所以在下面的某个地方,它没有在 STRAND 列中选择任何带有 - 的序列。
所以我尝试将其添加到原始代码中:
if direction == '+':
group['POSA'] = 1 + abs(group.POS1 - group.POS1[start_exon])
group['POSB'] = 1 + abs(group.POS2 - group.POS1[start_exon])
elif direction == '-':
group['POSA'] = 1 - abs(group.POS2 - group.POS2[start_exon])
group['POSB'] = 1 - abs(group.POS1 - group.POS2[start_exon])
else:
break
print group
# put into the result array
corrected.append(group)
这是输出的最后,它打印了第一个 - 然后在结束前冻结了一段时间:
+
GENE_ID TYPE POS1 POS2 STRAND POSA POSB
134991 PITG_23350 start_codon 161694 161696 + 516 518
134992 PITG_23350 stop_codon 162135 162137 + 957 959
134993 PITG_23350 exon 161179 162484 + 1 1306
134994 PITG_23350 CDS 161694 162134 + 516 956
-