为何Pandas可读取转换后的gVCF文件,而Polars直接读取会报错?
为何Pandas可读取转换后的gVCF文件,而Polars直接读取会报错?
我最近碰到了一个挺费解的问题:我用bcftools把gVCF文件的头信息去掉,转成了TSV格式(我习惯叫它CSV),用的命令是:
bcftools view foo.g.vcf -H > foo.g.vcf.csv
用head查看文件内容,看起来完全符合预期:
chr1H 1 . T <*> 0 . END=1000 GT:GQ:MIN_DP:PL 0/0:1:0:0,0,0 chr1H 1001 . T <*> 0 . END=1707 GT:GQ:MIN_DP:PL 0/0:1:0:0,0,0 chr1H 1708 . C <*> 0 . END=1763 GT:GQ:MIN_DP:PL 0/0:6:2:0,6,59 chr1H 1764 . T <*> 0 . END=2000 GT:GQ:MIN_DP:PL 0/0:1:0:0,0,0 chr1H 2001 . A <*> 0 . END=3000 GT:GQ:MIN_DP:PL 0/0:1:0:0,0,0 chr1H 3001 . G <*> 0 . END=4000 GT:GQ:MIN_DP:PL 0/0:1:0:0,0,0 chr1H 4001 . T <*> 0 . END=5000 GT:GQ:MIN_DP:PL 0/0:1:0:0,0,0 chr1H 5001 . T <*> 0 . END=6000 GT:GQ:MIN_DP:PL 0/0:1:0:0,0,0 chr1H 6001 . A <*> 0 . END=7000 GT:GQ:MIN_DP:PL 0/0:1:0:0,0,0 chr1H 7001 . G <*> 0 . END=8000 GT:GQ:MIN_DP:PL 0/0:1:0:0,0,0
可当我在Jupyter Notebook里尝试用Polars直接读取这个文件时,却弹出了一个计算错误:Original error: remaining bytes non-empty,用的代码是:
import polars as pl df = pl.read_csv("foo.g.vcf.csv", has_header=False, new_columns=["CHROM", "POS", "ID", "REF", "ALT", "QUAL", "FILTER", "INFO", "FORMAT", "SAMPLE"], separator="\t")
有意思的是,如果我先用Pandas读取这个文件,再转换成Polars的DataFrame,整个过程却完全顺畅,没有任何问题,代码如下:
import pandas as pd import polars as pl df = pd.read_csv("foo.g.vcf.csv", header=None, sep="\t", names=["CHROM", "POS", "ID", "REF", "ALT", "QUAL", "FILTER", "INFO", "FORMAT", "SAMPLE"]) df = pl.DataFrame(df)
我就纳闷了:同样的文件,为什么Pandas能直接读取,Polars却不行?而且另一个用完全相同方法处理的VCF文件,Polars直接读取就完全正常。
备注:内容来源于stack exchange,提问作者skranz
相关产品推荐
相关产品推荐

