【问题标题】:Writing processed data into excel using CSV Python使用 CSV Python 将处理后的数据写入 excel
【发布时间】:2015-11-27 01:11:12
【问题描述】:

我正在尝试使用 CSV 将一些数据写入 Excel 电子表格。 我正在编写一个主题查找器,从 fasta 读取输入并输出到 excel。 但我很难以正确的格式写入数据。

我在 excel 中想要的结果如下所示..

SeqName     M1      Hits    M2          Hits
Seq1        MN[A-Z] 3       V[A-Z]R[ML] 2
Seq2        MN[A-Z] 0       V[A-Z]R[ML] 5
Seq3        MN[A-Z] 1       V[A-Z]R[ML] 0

我已经生成了正确的结果,但我只是不知道如何将它们以上述正确格式放置。

这是我目前的代码。

import re
from Bio import SeqIO
import csv
import collections

def SearchMotif(f1, motif, f2="motifs.xls"):
    with open(f1, 'r') as fin, open(f2,'wb') as fout:
        # This makes SeqName static and everything else mutable thus, when more than 1 motifs are searched,
        # they can be correctly placed into excel.
        writer = csv.writer(fout, delimiter = '\t')
        motif_fieldnames = ['SeqName']
        writer_dict = csv.DictWriter(fout,delimiter = '\t' ,fieldnames=motif_fieldnames)
        for i in range(0,len(motif),1):
            motif_fieldnames.append('M%d' %(i+1))
            motif_fieldnames.append('Hits')
        writer_dict.writeheader()

# Reading input fasta file for processing.
    fasta_name = []
    for seq_record in SeqIO.parse(f1,'fasta'):
        sequence = repr(seq_record.seq) # re-module only takes string
        fasta_name.append(seq_record.name)
        print sequence            **********
        for j in motif:
            motif_name = j
            print motif_name       **********
            number_count = len(re.findall(j,sequence))
            print number_count     **********
            writer.writerow([motif_name])


    for i in fasta_name:
        writer.writerow([i]) # [] makes it fit into one column instead of characters taking each columns

带有星号 ********** 的打印语句生成这个...其中 number 是 Hits 的数量,差异序列是 seq1、seq2 ...等等。

Seq('QIKDLLVSSSTDLDTTLVLVNAIYFKGMWKTAFNAEDTREMPFHVTKQESKPVQ...LTS', SingleLetterAlphabet())
PA[A-Z]
0
Y[A-Z]L[A-Z]
0
Seq('SFNVATLPAESSSTDLDTTVLLPDEPAEVSDLERIETEWTNMKILELPFAPQMK...VSS', SingleLetterAlphabet())
PA[A-Z]
2
Y[A-Z]L[A-Z]
0
Seq('PAESIYFKIEKTYNLT', SingleLetterAlphabet())
PA[A-Z]
1
Y[A-Z]L[A-Z]
1

【问题讨论】:

    标签: python excel csv


    【解决方案1】:

    您可以将数据写入 Pandas DataFrame,然后使用 DataFrame 的 to_csv 方法将其导出为 CSV。还有一个 to_excel 方法。 Pandas 不会让您拥有多个具有相同名称的列,例如“Hits”列。但是,您可以通过将所需的列名放在第一行并在导出时使用 header=False 选项来解决此问题。

    “import pandas as pd”,然后用以下代码替换以“fasta_name = []”开头的代码:

    column_names = ['SeqName']
    for i, m in enumerate(motif):
        column_names += ['M'+str(i), 'Hits'+str(i)]
    
    df = pd.DataFrame(columns=column_names)
    
    for row, seq_record in enumerate(SeqIO.parse(f1, 'fasta')):
        sequence = repr(seq_record.name)
        df.loc[row, 'SeqName'] = sequence
        for i, j in enumerate(motif):
            df.loc[row, 'M'+str(i)] = j
            df.loc[row, 'Hits'+str(i)] = len(re.findall(j, sequence))
    
    df.to_csv(index=False)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 2019-03-06
      • 2016-07-26
      • 2018-12-29
      • 1970-01-01
      • 2015-01-21
      相关资源
      最近更新 更多