如何将压缩(gz)CSV文件读入dask Dataframe?

Mag*_*n88 7 python csv pandas dask

有没有办法读取通过gz压缩到dask数据帧的.csv文件?

我直接尝试过

import dask.dataframe as dd
df = dd.read_csv("Data.gz" )
Run Code Online (Sandbox Code Playgroud)

但得到一个unicode错误(可能是因为它正在解释压缩的字节)有一个"compression"参数但compression = "gz"不起作用,到目前为止我找不到任何文档.

使用pandas我可以直接读取文件而不会产生问题,除了结果炸毁了我的记忆;-)但是如果我限制行数它可以正常工作.

import pandas.Dataframe as pd
df = pd.read_csv("Data.gz", ncols=100)
Run Code Online (Sandbox Code Playgroud)

de1*_*de1 13

熊猫目前的文件说:

压缩:{'推断','gzip','bz2','zip','xz',无},默认'推断'

由于'推断'是默认值,这可以解释为什么它与熊猫一起使用.

Dask关于压缩参数的文档:

像'gzip'或'xz'这样的字符串.必须支持有效的随机访问.具有与已知压缩算法(gz,bz2)对应的扩展名的文件名将相应地自动压缩

这表明它也应该推断压缩至少为gz.它没有(并且它仍然没有在0.15.3中)可能是一个错误.但是,它正在使用compression ='gzip'.

即:

import dask.dataframe as dd
df = dd.read_csv("Data.gz", compression='gzip')
Run Code Online (Sandbox Code Playgroud)


Chr*_*lis 5

实际上,这是dask的长期限制。将文件加载与dask.delayed 替代

import pandas as pd
import dask.dataframe as dd
from dask.delayed import delayed

filenames = ...
dfs = [delayed(pd.read_csv)(fn) for fn in filenames]

df = dd.from_delayed(dfs) # df is a dask dataframe
Run Code Online (Sandbox Code Playgroud)

  • 我相信问题是关于单个 gz (有效)而不是 zip 文件(在链接的 GitHub 问题中提到 zip 作为限制)。在这种情况下使用延迟还有优势吗? (2认同)