我正在尝试将一个大型压缩数据集加载到 python 中,其结构如下:
到目前为止,我已经使用 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)
这是可行的,因为 zip 文件具有偏移列表,因此可以独立读取组件文件;但是,性能可能取决于存档的创建方式,请记住:您只有一个存储设备,无论如何,该设备的吞吐量可能是您的瓶颈。
也许更daskian的方法可以做到这一点如下,利用以下功能fsspec
,dask 使用的文件系统抽象
df = dd.read_csv('zip://*.csv', storage_options={'fo': 'year.zip'})
(当然,选择适合您的文件的 glob 模式;如果您在文件前面添加“zip://”,您也可以在此处使用文件列表)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)