根据thisAnswer的回答,我一直在try 使用DASK从压缩目录中读取多个CSV.但是,我收到了一条很长的错误消息,我无法理解.我认为最重要的一句话是:

msgpack.exceptions.ExtraData: unpack(b) received extra data.

data台是公开发售的.

import numpy as np
import pandas as pd
import dask.dataframe as dd

# read data, the dask way
df = dd.read_csv('zip://BACI*.csv', sep=",", dtype={"k":str, "i":int, "j":int, "t":int}, storage_options={'fo': '../input/baci_hs92.zip'})
df.head()

我相信这种飞过的提取应该在Dask中起作用,我宁愿不像other个答案建议的那样将所有文件解压缩到某个目录中.

推荐答案

以下是等效的和有效的方法:

In [1]: u = "http://www.cepii.fr/DATA_DOWNLOAD/baci/data/BACI_HS92_V202301.zip"

In [2]: import numpy as np
   ...: import pandas as pd
   ...: import dask.dataframe as dd
   ...:
   ...: # read data, the dask way
   ...: df = dd.read_csv(f'zip://BACI*.csv::{u}', sep=",", dtype={"k":str, "i":int, "j":int, "t":int})
   ...: df.head()

然而,这是很慢的,因为Dask会抢先读取压缩数据的块(必须从每个成员文件的开始扫描,因为Eflate很难)以找到换行偏移量.

相反,如果您添加blocksize=None,则前期成本要小得多,因为不需要查找换行符;然而,即使获得.head()也需要读取第一个压缩文件的整个内容.此外,它显示第"q"列的数据类型不匹配,可能是因为用于猜测的前几行都有数字,但后来在同一列中有对象类型的内容.

Kerchunk项目对查找和索引CSV(https://github.com/fsspec/kerchunk/issues/66)中的换行符和索引ZIP/GZIP文件(https://github.com/fsspec/kerchunk/issues/281)感兴趣,这意味着一旦someone完成前期索引工作,就可以像这样快速并行访问数据.此功能尚不存在.

Python相关问答推荐

如何输入提示抽象方法属性并让mypy高兴?

带有计数值的Pandas数据帧

保留包含pandas pandras中文本的列

使用regex分析具有特定字符的字符串(如果它们存在)

Python无法在已导入的目录中看到新模块

pandas DataFrame GroupBy.diff函数的意外输出

如何标记Spacy中不包含特定符号的单词?

在Python Attrs包中,如何在field_Transformer函数中添加字段?

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

OR—Tools CP SAT条件约束

Pandas计数符合某些条件的特定列的数量

Python+线程\TrocessPoolExecutor

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

调用decorator返回原始函数的输出

使用Python查找、替换和调整PDF中的图像'

如何在Pyplot表中舍入值

剪切间隔以添加特定日期

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?