如何将压缩(gz)CSV文件读入dask数据帧?

2024-04-26 04:59:56 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法读取通过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)

Tags: 文件csv数据importpandasdfreaddata
3条回答

熊猫目前的文件显示:

compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’

因为“推断”是默认的,这就解释了它为什么要和熊猫一起工作。

Dask关于压缩参数的文档:

String like ‘gzip’ or ‘xz’. Must support efficient random access. Filenames with extensions corresponding to known compression algorithms (gz, bz2) will be compressed accordingly automatically

这意味着它还应该推断至少gz的压缩。它没有(在0.15.3中仍然没有)可能是一个bug。但是,它使用压缩'gzip'工作。

即:

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

这实际上是dask的一个长期限制。使用dask.delayedinstead加载文件:

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

没有档案很难说。如果你设置了编码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

相关问题 更多 >