将 Fastq 文件直接读取到 Pandas Dataframe 中

问题描述 投票:0回答:2

我正在尝试将 Fastq 文件直接读入 pandas 数据帧,类似于下面的链接:

将 FASTQ 文件读入 Spark 数据帧

我到处搜索,但找不到可行的选择。

目前,我正在运行以下内容:

cmd = f'zcat {infile} | paste - - - -'
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
b = StringIO(p.communicate()[0].decode('utf-8'))

_ = pd.read_csv(b, sep='\t', names=['read_id', 'seq', '+', 'qual'], on_bad_lines='skip', dtype=str, chunksize=1000000)

有没有更干净的方法来只使用

pandas
来代替?我正在考虑设置
sep='\n'
,但后来我只得到 1 行多列。我可以读入文件,然后每隔 4 行创建 4 个所需的列(或类似的东西)吗?

速度确实是我所追求的,所以最快的解决方案将是最好的。

旁注:我的 Fastq 文件无法放入内存,所以我必须对读取进行分块

python pandas bash bioinformatics fastq
2个回答
2
投票

所以我找到了一些有用的东西(以防万一其他人想做类似的事情):

import pandas as pd

pd.DataFrame(pd.read_csv(<infile>, sep='\n', header=None).values.reshape(-1, 4), columns=['read_id', 'seq', '+', 'qual'])

想法来自:

在 PANDAS 中每第 n 行转置一列中的数据

(感谢@piRSquared的建议)


0
投票

我用过这个,这个有效:

将 pandas 导入为 pd

pd.DataFrame(pd.read_csv(, sep=' ', header=None).values.reshape(-1, 4), columns=['read_id', 'seq', '+', 'qual'])

© www.soinside.com 2019 - 2024. All rights reserved.