将列表添加到Excel列

2024-09-29 01:36:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件:

  • 1文件是包含序列名及其序列的fasta文件。在
  • 另一个文件是一个excel文件,它有一个序列名的“Hcolumn”,旁边有一个空列,标题为“Hsequence”和一个“Kcolumn”,旁边还有一个空列,标题为“Ksequence”。在

我想遍历两个文件,如果fasta文件中的序列名也在“Hcolumn”或“Kcolumn”中,则将该序列添加到excel文件中相应的sequence列中,即“Hsequence”或“Ksequence”列。 我的想法是获取vh值的位置,并将其seq值添加到其右侧的单元格(下一行)。在

更新示例

fasta文件(忽略>;符号):

headerA
AAAGGCCT
headerB
ATCCTTTG
headerC
GGGGTCCCAAT

excel工作表

^{pr2}$

预期结果:

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')

序列列返回空值,有人能帮忙吗 谢谢


Tags: 文件in标题data序列excelseqfasta
2条回答

这是给你一些想法的快速尝试。。。在

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 
  1. 构建一个字典fasta_dic,序列名作为键,序列作为值。

  2. 函数fill_seq检查输入x是否在您之前定义的字典中,如果找到值,它将返回序列。

  3. 将函数fill_seq应用于H/K序列列,使用H/K序列中的值作为输入。

在此之后,您可以继续使用数据帧或将其导出到xls文件。在

相关问题 更多 >