将列表添加到Excel列
我有两个文件:
- 1文件是包含序列名称及其序列的fasta文件。
- 另一个文件是一个excel文件,它有一个序列名称的“Hcolumn”和一个空的列,它的下一个是头部'Hsequence'和一个'Kcolumn'的序列名称和一个空的列旁边的头部'Ksequence ”。
我想循环两个文件,如果fasta文件中的序列名称也在'Hcolumn'或'Kcolumn'中,那么将序列添加到excel文件中相应的序列列,这是'Hsequence'或“Ksequence”专栏。 我的想法是获取vh值的位置,并将其seq值添加到右侧单元格(下一行)。
用例子更新
fasta文件(忽略>符号):
headerA AAAGGCCT headerB ATCCTTTG headerC GGGGTCCCAAT
Excel表格
Hcolumn Hsequence Kcolumn Ksequence headerA headerB headerC headerE headerD headerF
期望的结果:
Hcolumn Hsequence Kcolumn Ksequence headerA AAAGGCCT headerB ATCCTTTG headerC GGGGTCCCAAT headerE headerD headerF
我的新代码:(我下面的代码只处理一列,我不知道如何说,如果它是在列A或列B)
for line in f: seq = f.readline() for vh in data["Hcolumn"]: vh = vh.rstrip() if (title in vh): #print(">"+title, seq) data["HSequence"]=data["Hcolumn"].apply(lambda vh: seq) else: data["HSequence"]=data["Hcolumn"].apply(lambda vh: '') break return data.to_csv('Fullseqfile.txt', sep='\t')
序列列返回null,有人可以帮助谢谢
In [1]: import pandas as pd In [2]: !cat data/question1/file.fasta headerA AAAGGCCT headerB ATCCTTTG headerC GGGGTCCCAAT In [3]: xls=pd.read_excel('file.xls') In [4]: xls Out[4]: Hcolumn Hsequence Kcolumn Ksequence 0 headerA NaN headerB NaN 1 headerC NaN headerE NaN 2 headerD NaN headerF NaN In [5]: fh = open('file.fasta') ...: fasta_dic={} ...: for line in fh: ...: if line.startswith('h'): ...: seq_header = line.strip('\n') ...: fasta_dic[seq_header] = '' ...: else: ...: fasta_dic[seq_header] = line.strip('\n') ...: In [6]: def fill_seq(x): ...: if x in fasta_dic.keys(): ...: return fasta_dic[x] ...: else: ...: return '' ...: In [7]: xls['Hsequence'] = xls['Hcolumn'].apply(fill_seq) ...: xls['Ksequence'] = xls['Kcolumn'].apply(fill_seq) ...: In [8]: xls Out[8]: Hcolumn Hsequence Kcolumn Ksequence 0 headerA AAAGGCCT headerB ATCCTTTG 1 headerC GGGGTCCCAAT headerE 2 headerD headerF
-
构build一个字典
fasta_dic
,序列名称为key,序列为value。 -
函数
fill_seq
检查inputx
是否在你之前定义的字典中,如果它发现它将返回序列的值。 -
使用H / K序列的值作为input,将函数
fill_seq
应用于H / K序列列。
在此之后,您可以继续使用您的dataframe或将其导出到xls文件。
这是一个快速的尝试给你一些想法…
FASTA = [ 'headerA', 'AAAGGCCT', 'headerB', 'ATCCTTTG', 'headerC', 'GGGGTCCCAAT', ] EXCEL = { 'Hcolumn': ['headerA', 'headerC', 'headerD'], 'Hsequence': {}, 'Kcolumn': ['headerB', 'headerE', 'headerF'], 'Ksequence': {}, } for index in range(0, len(FASTA), 2): value = FASTA[index] column = EXCEL['Hcolumn'] # print index, value, column if value in EXCEL['Hcolumn']: position = column.index(value) EXCEL['Hsequence'][position] = FASTA[index+1] for item in EXCEL.iteritems(): print item ======================== ('Hcolumn', ['headerA', 'headerC', 'headerD']) ('Kcolumn', ['headerB', 'headerE', 'headerF']) ('Hsequence', {0: 'AAAGGCCT', 1: 'GGGGTCCCAAT'}) ('Ksequence', {})