Python 使用dask加载大型压缩数据集

Python 使用dask加载大型压缩数据集,python,pandas,csv,zip,dask,Python,Pandas,Csv,Zip,Dask,我正在尝试将一个大型压缩数据集加载到python中,其结构如下: year.zip 年 月 很多.csv文件 到目前为止,我已经使用ZipFile库来迭代每个CSV文件,并使用pandas加载它们 zf = ZipFile(year.zip) for file in zf.namelist: try: pd.read_csv(zf.open(file)) 这需要很长时间,我正在研究优化代码。我遇到的一个选择是使用dask库。但是,我不知道如何最好地实现

我正在尝试将一个大型压缩数据集加载到python中,其结构如下:

  • year.zip
        • 很多.csv文件
到目前为止,我已经使用ZipFile库来迭代每个CSV文件,并使用pandas加载它们

zf = ZipFile(year.zip)

for file in zf.namelist:
    try:
        pd.read_csv(zf.open(file))

这需要很长时间,我正在研究优化代码。我遇到的一个选择是使用dask库。但是,我不知道如何最好地实现它,以便在一个命令中访问至少整个月的CSV文件。有什么建议吗?也可以使用其他优化方法

有几种方法可以做到这一点。与您的建议最相似的是:

zf = ZipFile("year.zip")
files = list(zf.namelist)
parts = [dask.delayed(pandas.read_csv)(f) for f in files)]
df = dd.from_delayed(parts)
这是因为zipfile有一个偏移列表,所以组件文件可以独立读取;但是,性能可能取决于归档文件的创建方式,请记住:您只有一个存储设备,因此设备的吞吐量可能是您的瓶颈

也许有一种更具达斯基风格的方法可以做到这一点,它利用了dask使用的文件系统抽象
fsspec
的特性

df = dd.read_csv('zip://*.csv', storage_options={'fo': 'year.zip'})
(当然,选择适合您的文件的glob模式;如果在文件前面加上“zip://”,也可以在此处使用文件列表)