Python 以制表符分隔的数据集值错误包含多个元素的数组的真实值不明确错误

Python 以制表符分隔的数据集值错误包含多个元素的数组的真实值不明确错误,python,numpy,Python,Numpy,我有一个选项卡分隔的数据集,如下所示: PITG_00022 start_codon 262407 262409 - PITG_00022 stop_codon 260777 260779 - PITG_00022 exon 260867 262409 - PITG_00022 CDS 260867 262409 - PITG_00022 exon 260777 260826 - PITG_00022 CDS 260780 260826 - PI

我有一个选项卡分隔的数据集,如下所示:

PITG_00022  start_codon 262407  262409  -
PITG_00022  stop_codon  260777  260779  -
PITG_00022  exon    260867  262409  -
PITG_00022  CDS 260867  262409  -
PITG_00022  exon    260777  260826  -
PITG_00022  CDS 260780  260826  -
PITG_00023  start_codon 273160  273162  +
PITG_00023  stop_codon  274778  274780  +
PITG_00023  exon    272998  273288  +
PITG_00023  CDS 273160  273288  +
PITG_00023  exon    273368  273652  +
PITG_00023  CDS 273368  273652  +
PITG_00023  exon    273729  273788  +
PITG_00023  CDS 273729  273788  +
PITG_00023  exon    273885  273958  +
PITG_00023  CDS 273885  273958  +
PITG_00023  exon    274022  274127  +
PITG_00023  CDS 274022  274127  +
PITG_00023  exon    274194  274346  +
这是我的代码,非常优雅地发布在这里,我做了一些更改,但我得到的错误(见下文)是在这些更改之前出现的:

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
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)
以下是输出的示例:

 GENE_ID     TYPE         POS1    POS2    STRAND  POSA  POSB
104  PITG_00021  start_codon  258927  258929  +       1     3   
105  PITG_00021  stop_codon   260547  260549  +       1621  1623
106  PITG_00021  exon         258927  260549  +       1     1623
107  PITG_00021  CDS          258927  260546  +       1     1620
+ PITG_00023
     GENE_ID     TYPE         POS1    POS2    STRAND  POSA  POSB
114  PITG_00023  start_codon  273160  273162  +       163   165 
115  PITG_00023  stop_codon   274778  274780  +       1781  1783
116  PITG_00023  exon         272998  273288  +       1     291 
117  PITG_00023  CDS          273160  273288  +       163   291 
118  PITG_00023  exon         273368  273652  +       371   655 
119  PITG_00023  CDS          273368  273652  +       371   655 
120  PITG_00023  exon         273729  273788  +       732   791 
121  PITG_00023  CDS          273729  273788  +       732   791 
122  PITG_00023  exon         273885  273958  +       888   961 
123  PITG_00023  CDS          273885  273958  +       888   961 
124  PITG_00023  exon         274022  274127  +       1025  1130
125  PITG_00023  CDS          274022  274127  +       1025  1130
126  PITG_00023  exon         274194  274346  +       1197  1349
这是我运行一段时间后得到的错误:

>>>>Traceback (most recent call last):
  File "C:\Users\Chris\Documents\I.S\Part-2\Convert_to_exonfile.py", line 51, in <module>
if group.index[group.TYPE=='start_codon']:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>>>
>>回溯(最近一次呼叫最后一次):
文件“C:\Users\Chris\Documents\I.S\Part-2\Convert\u to\u exonfile.py”,第51行,在
如果group.index[group.TYPE=='start\u codon']:
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
>>>>

现在,我手工测试了一些计算结果,它似乎完全符合我的要求,除了链为+(注意,样本输入中的PITG_00022基因在输出中缺失)的基因外。我认为它首先要对+串组进行计算,但一旦到了-串组,就会出现这个错误。现在我阅读了关于使用
any()
all()
的文章,以及关于在类似的数组valueError线程中使用
set()
的文章,但我不知道这将如何解决我的问题,或者如何实现它。感谢您的帮助。

现在的情况是,您有一个
有多个
起始密码子
,所以
组。TYPE='start\u codon'
有多个
True
条目,所以
组。index[group.TYPE='start\u codon']
有多个条目。您似乎只是在检查它是否为空数组,如果是这样的话,将整个表达式包装在
any()
中就可以了。尽管你可能想弄清楚为什么你会得到不止一个
start\u密码子,以及这是否有意义。我尝试使用
any()
代码,这样就消除了错误。我不确定它对输出有什么影响,虽然看起来是一样的。我试图让它将
start\u exon
定义为在给定基因ID的
start\u密码子
类型之后出现的
exon
类型。因此一个组中应该只有1个
start\u密码子
,但数据集有数千个基因,因此有数千个
start\u密码子
。不过,我仍然没有收到任何一条链的条目。我认为这与这个错误有关,但显然不是。谢谢你的帮助