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

时间:2016-10-07 19:27:03

标签: python csv pandas dask

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

我已经直接尝试了

import dask.dataframe as dd
df = dd.read_csv("Data.gz" )

但得到一个unicode错误(可能是因为它正在解释压缩的字节)有一个"compression"参数,但compression = "gz"不能工作,我找不到任何文档,所以远。

使用pandas我可以直接读取文件,除了结果炸掉我的记忆之外没有问题;-)但是如果我限制行数就可以了。

import pandas.Dataframe as pd
df = pd.read_csv("Data.gz", ncols=100)

3 个答案:

答案 0 :(得分:9)

熊猫目前的文件说:

  

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

因为'推断'是默认值,这可以解释它为什么使用pandas。

关于压缩参数的Dask文档:

  

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

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

即:

import dask.dataframe as dd
df = dd.read_csv("Data.gz", compression='gzip')

答案 1 :(得分:1)

没有文件,很难说。如果您设置编码like # -*- coding: latin-1 -*-怎么办?或者由于read_csv基于熊猫,你甚至可以dd.read_csv('Data.gz', encoding='utf-8')。以下是Python编码列表:https://docs.python.org/3/library/codecs.html#standard-encodings

答案 2 :(得分:1)

这实际上是dask的长期限制。用dask.delayed instead加载文件:

import pandas as pd
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