将列表添加到 Excel 列
Add list to Excel column
我有两个文件:
- 1 文件是包含序列名称及其序列的 fasta 文件。
- 另一个文件是一个 excel 文件,它有一个 'Hcolumn' 序列名称和一个空列,旁边是 header 'Hsequence' 和一个 'Kcolumn' 的序列名称和它旁边的空列以及 header 'Ksequence'.
我想遍历这两个文件,如果fasta文件中的序列名称也在'Hcolumn'或'Kcolumn'中,则将序列添加到[中相应的序列列=47=] 文件,它是 'Hsequence' 或 'Ksequence' 列。
我这里的想法是获取vh值所在的位置,将其seq值添加到其右侧(下一行)的单元格中。
更新示例
fasta 文件(忽略 > 符号):
headerA
AAAGGCCT
headerB
ATCCTTTG
headerC
GGGGTCCCAAT
excel sheet
Hcolumn Hsequence Kcolumn Ksequence
headerA headerB
headerC headerE
headerD headerF
期望的结果:
Hcolumn Hsequence Kcolumn Ksequence
headerA AAAGGCCT headerB ATCCTTTG
headerC GGGGTCCCAAT headerE
headerD headerF
我的新代码:(我下面的代码只处理一列,我还不知道怎么说它是在 columnA 中还是在 columnB 中)
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')
序列列返回空值,谁能帮忙
谢谢
这是给你一些想法的快速尝试......
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', {})
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
构建字典fasta_dic
,序列名称作为键,序列作为值。
函数fill_seq
检查输入x
是否在您之前定义的字典中,如果找到值,它将return序列。
您将函数 fill_seq
应用于 H/K 序列列,使用来自 H/K 序列的值作为输入。
在此之后,您可以继续使用您的数据框或将其导出到 xls 文件。
我有两个文件:
- 1 文件是包含序列名称及其序列的 fasta 文件。
- 另一个文件是一个 excel 文件,它有一个 'Hcolumn' 序列名称和一个空列,旁边是 header 'Hsequence' 和一个 'Kcolumn' 的序列名称和它旁边的空列以及 header 'Ksequence'.
我想遍历这两个文件,如果fasta文件中的序列名称也在'Hcolumn'或'Kcolumn'中,则将序列添加到[中相应的序列列=47=] 文件,它是 'Hsequence' 或 'Ksequence' 列。 我这里的想法是获取vh值所在的位置,将其seq值添加到其右侧(下一行)的单元格中。
更新示例
fasta 文件(忽略 > 符号):
headerA
AAAGGCCT
headerB
ATCCTTTG
headerC
GGGGTCCCAAT
excel sheet
Hcolumn Hsequence Kcolumn Ksequence
headerA headerB
headerC headerE
headerD headerF
期望的结果:
Hcolumn Hsequence Kcolumn Ksequence
headerA AAAGGCCT headerB ATCCTTTG
headerC GGGGTCCCAAT headerE
headerD headerF
我的新代码:(我下面的代码只处理一列,我还不知道怎么说它是在 columnA 中还是在 columnB 中)
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')
序列列返回空值,谁能帮忙 谢谢
这是给你一些想法的快速尝试......
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', {})
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
构建字典
fasta_dic
,序列名称作为键,序列作为值。函数
fill_seq
检查输入x
是否在您之前定义的字典中,如果找到值,它将return序列。您将函数
fill_seq
应用于 H/K 序列列,使用来自 H/K 序列的值作为输入。
在此之后,您可以继续使用您的数据框或将其导出到 xls 文件。