我有一个excel文件:
data = pd.read_excel('.../excel.xlsx')
VHseqName VHseq
nameA
nameB
nameC
nameD
nameE
nameF
....
我有一个fasta文件:
f=open(".../Fastafile.fasta", "r+")
>nameA
AAAGGGCCT
>nameC
GGTTAACC
>nameD
CCCTTAA
>nameF
GGGGGAATTCC
....
我想要的输出是:(对于来自excel和fasta的名称的每个匹配,将下一行的序列放在同一行但是对于列' VHseq')
VHseqName VHseq
nameA AAAGGGCCT
nameB
nameC GGTTAACC
nameD CCCTTAA
nameE
nameF GGGGGAATTCC
....
我的代码:
for vh in data["VHseqName"]:
position = data.index.get_indexer_for((data[data['VHseqName'] == vh].index))
for line in f:
title = line[1:]
title = title.rstrip()
seq = f.readline()
if(title in vh):
data['VHseq'][position] = seq
break
我的代码有时会运行,有时它不会提供完整的结果表,每次都会出现此错误:
正在尝试在DataFrame的切片副本上设置值 请参阅文档中的警告:http://pandas.pydata.org/pandas- docs / stable / indexing.html#indexing-view-versus-copy 数据[' full_H_Sequence'] [position] = seq
我调查了它并玩了代码并改为(如下面的评论所示)
data.loc[:,('full_H_Sequence',position)] = seq
但这次我收到此错误消息: 返回数组(a,dtype,copy = False,order = order) ValueError:使用序列设置数组元素
这里使用的语法是什么?
答案 0 :(得分:0)
that link的解释非常有帮助。看起来解决方案是使用data.loc[:,('VHseq', position)] = seq
。问题似乎是第一个[]
返回一个单独索引的数据框,您无法更新。