Biopython SeqIO 到 Pandas Dataframe

2023-11-23

我有一个可以轻松解析的 FASTA 文件SeqIO.parse.

我对提取序列 ID 和序列长度感兴趣。我用这些行来做到这一点,但我觉得它太重了(两次迭代,转换等)

from Bio import SeqIO
import pandas as pd


# parse sequence fasta file
identifiers = [seq_record.id for seq_record in SeqIO.parse("sequence.fasta",
                                                           "fasta")]
lengths = [len(seq_record.seq) for seq_record in SeqIO.parse("sequence.fasta",
                                                             "fasta")]
#converting lists to pandas Series    
s1 = Series(identifiers, name='ID')
s2 = Series(lengths, name='length')
#Gathering Series into a pandas DataFrame and rename index as ID column
Qfasta = DataFrame(dict(ID=s1, length=s2)).set_index(['ID'])

我只需一次迭代就可以做到这一点,但我得到了一个字典:

records = SeqIO.parse(fastaFile, 'fasta')

我不知何故无法得到DataFrame.from_dict上班...

我的目标是迭代 FASTA 文件,并将 ids 和序列长度获取到DataFrame通过每次迭代。

这里有一个短 FASTA 文件对于那些想要提供帮助的人。


你说得对 - 你绝对不应该解析该文件twice,当您将数据转换为字典时,将数据存储在字典中会浪费计算资源numpy稍后数组。

SeqIO.parse()返回一个生成器,因此您可以逐条记录地迭代,构建一个列表,如下所示:

with open('sequences.fasta') as fasta_file:  # Will close handle cleanly
    identifiers = []
    lengths = []
    for seq_record in SeqIO.parse(fasta_file, 'fasta'):  # (generator)
        identifiers.append(seq_record.id)
        lengths.append(len(seq_record.seq))

See 彼得·科克的回答以更有效的方式从 FASTA 文件中解析 ID 和序列。

你的其余代码对我来说看起来相当不错。但是,如果您确实想优化使用pandas,您可以阅读以下内容:


关于最小化内存使用

咨询来源panda.Series,我们可以看到data内部存储为numpy ndarray:

class Series(np.ndarray, Picklable, Groupable):
    """Generic indexed series (time series or otherwise) object.

    Parameters
    ----------
    data:  array-like
        Underlying values of Series, preferably as numpy ndarray

如果你做identifiers an ndarray,它可以直接用于Series无需构造新数组(参数copy, 默认False)将阻止新的ndarray如果不需要则创建。通过将序列存储在列表中,您将强制 Series 将所述列表强制转换为ndarray.

避免初始化列表

如果您事先确切知道您有多少个序列(以及最长的 ID 有多长),您可以初始化一个空的ndarray保存标识符,如下所示:

num_seqs = 50
max_id_len = 60
numpy.empty((num_seqs, 1), dtype='S{:d}'.format(max_id_len))

当然,很难确切地知道您将拥有多少个序列,或者最大的 ID 是多少,因此最简单的方法是让numpy从现有列表转换。然而,这是技术上存储数据以供使用的最快方法pandas.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Biopython SeqIO 到 Pandas Dataframe 的相关文章

随机推荐

  • calendar.getDisplayName 返回错误的日期

    下面是我的程序 当我输入相关的月份 日期和年份时 它返回错误的日期名称 我在这里缺少什么 我的计划 import java util Calendar import java util Locale import java util Sca
  • 理解git:将分支连接到远程存储库

    我在 github 上有一个存储库 比如 testrepo 现在我想设置一个本地存储库repo有一个分支origin master我希望能够从存储库中编辑内容 repo origin master lt gt origin master 克
  • 有什么方法可以从 Linux 用户空间向 SD 卡发送命令吗?

    我有一个 Debian 7 0 Linux 3 2 嵌入式 ARM TI AM335x 系统 这是我们开发的定制板 但是SD卡部分至少和开发板是一样的 我想向卡发出一些特定于供应商的 SD 卡命令 即使用 CMD56 读取一些 SMART
  • 替代 PHP exec() 函数

    目前我正在使用 exec zcat filename output 解压缩一个 Z输入文件 但不幸的是我的托管公司现在已禁用此功能 有解决方法吗 pathtofile filename lis Z exec zcat pathtofile
  • 可串行化事务死锁

    文件说 serializable交易一笔接一笔地执行 但实际上这似乎并非事实 这是两笔几乎相等的交易 区别只是延迟了 15 秒 1 set transaction isolation level serializable go begin
  • Int 数组的数组。仅按顺序存储重复项

    我需要存储一个 Int 数组的数组来存储有序重复项 位于数组中 Example 给定数组 mainArray 7 7 3 2 2 2 1 7 5 5 现在我需要创建一个 int 数组的二维数组 例子 Array 7 7 3 2 2 2 1
  • R:从数值变量和自定义/开放式/单值区间创建分类变量

    我经常发现自己尝试从数值变量 用户提供的一组范围创建分类变量 例如 假设我有一个带有数字变量的 data framedf V并想创建一个新变量df VCAT这样 df VCAT 0 if df V等于 0 df VCAT 1 if df V
  • 通过补丁或合并提案在启动板上提交错误修复?

    我是新来的发射台 and Bazaar 我正在尝试找出提交错误修复的最佳方法 我正在使用一些托管在 Launchpad 上的相当流行的开源软件 但它不是很稳定 我创建了自己的项目分支来稳定它 并仅应用我们需要的错误修复 而无需添加正在进行的
  • 如何使用API​​网关调用AWS步骤函数?

    根据Amazon的文档 可以使用HTTP API调用step函数 Step Functions 可以通过 Step Functions 访问和使用 控制台 AWS 开发工具包或 HTTP API 我试图搜索详细信息 但似乎找不到任何好的信息
  • 按父 ID 的顺序选择记录

    简单的问题 只是无法按照我需要的顺序获得结果集 p 我有一个表 类别 id name parent 1 apple 0 2 macintosh 1 3 atari 0 4 st 3 5 lisa 1 我试图选择获取以下结果集 1 apple
  • Azure Web 应用程序的数据库连接速度慢

    我开发了一个 Web 应用程序 一个标准的 Web 应用程序 允许用户显示和更新 SQL 数据库中的一组数据 Web 应用程序使用 AngularJS 客户端 该客户端通过 MVC Web API 调用与 Web 服务器交互 以检索和更新数
  • 如何动态更改角度服务实现?

    我是 Angular2 的新手 并且我有两项服务DefaultService And SpecialService应根据组件状态交替使用 我不知道是否可以将单例注入到我的组件中GeneralService以某种方式表现得像DefaultSe
  • 禁用时间轴上的照片分组

    有谁知道Facebook何时将时间轴上同一相册中的照片分组 有可能阻止它这样做吗 如果您每天 通过 API 发布一张或两张图片 并带有指向其他网站的反向链接 并且 Facebook 将这些内容分组 那么其中一个链接可能永远不会被其他人看到
  • Jasmine.js 测试 - 监视 window.open

    JS var link this notificationDiv getElementsByTagName a 0 link addEventListener click function evt evt preventDefault vi
  • 类型“Microsoft.Reporting.WebForms.ReportViewer”存在于两者中

    我有一个 ASP NET 应用程序 它引用版本 9 0 0 0 的 Microsoft ReportViewer WebForms 我更改为引用版本 11 0 0 0 的 Microsoft ReportViewer WebForms 现在
  • 如何设置画布大小?

    我有一个名为 SeatsPanel 的类 我在 onDraw 方法中绘制座位 使用 drawRect onDraw方法使用Canvas作为参数 但是如何设置Canvas的大小呢 我之所以问这个问题是因为这个类在另一个类中被夸大了 我知道画布
  • R:合并同一数据表中的行,连接某些列

    我在 R 中有我的数据表 我想合并具有相同的行customerID 然后连接其他合并列的元素 我想从这里开始 title author customerID 1 title1 author1 1 2 title2 author2 2 3 t
  • 在 Android 中运行单元测试时,意图解析为不同的进程

    我有一个使用两个活动的小型应用程序 这两个活动都继承自 MapActivity 并显示地图 com google android maps 由于 Android 谷歌地图文档说 每个仅支持一个 MapActivity 过程 多个地图活动 同
  • 强制用户在 Java 中填充 varargs 参数的好方法[重复]

    这个问题在这里已经有答案了 我想强制用户在调用构造函数时填写可选参数 public MyClass String params this params params 目前 以下代码有效 new MyClass 我想阻止它 我想到了这一点 p
  • Biopython SeqIO 到 Pandas Dataframe

    我有一个可以轻松解析的 FASTA 文件SeqIO parse 我对提取序列 ID 和序列长度感兴趣 我用这些行来做到这一点 但我觉得它太重了 两次迭代 转换等 from Bio import SeqIO import pandas as