是否有比使用列表理解更快的方法将 csv 文件保存为极坐标数据帧?

问题描述 投票:0回答:1

我有 2 个文件夹,每个文件夹包含 1507 个 csv 文件,我使用以下代码使用列表理解将每个文件保存为极坐标数据框:

bdsim=[pl.read_csv(x, schema_overrides = {"X0.6": pl.Float64}) for x in simpaths]
bdens=[pl.read_csv(x, schema_overrides = {"ridge_reg": pl.Float64}) for x in enspaths]

simpaths
enspaths
是每个 csv 文件的路径列表,我将每个极坐标数据帧保存在名为 bdsim 和 bdens 的列表中。所有文件都在我的谷歌驱动器上,我正在使用谷歌colab。目前,这两条线路运行时间需要30多分钟。怎样才能提高效率?

我尝试过 for 循环,但这不是一种非常 Pythonic 的方法

dataframe list-comprehension python-polars coding-efficiency
1个回答
0
投票

不,可能不是。

列表理解并不占用这里的时间。使用 3000 个对象进行列表理解非常快,在 30 分钟的工作中完全不会被注意到(并且对象的大小对于理解的速度并不重要,因为列表操作对数据帧的引用进行操作,它们不不要洗牌所有数据)

一直占用的时间是将 csv 文件实际读取到极坐标数据帧中,这只能是因为数据量很大。您可以尝试从 csv 切换到不太易于使用但更内存友好的格式。我建议你研究一下(增加实施的难度)

  1. 压缩它们(为每个文件创建 .csv.gz)
  2. 使用 hdf5(用于将多维数组集合保存到磁盘的库/文件格式,虽然有点晦涩)
  3. 构建某种缓存逻辑,以便您只重新加载自上次将其放入缓存以来更改的 csv(您可以使用 pickle 和 gzip 将数据帧存储在磁盘中)

我过去曾使用过所有这些方法进行数据分析。特别是对于使用 jupyter 进行数据分析,如果您的数据很少更改,我会添加以下内容,这是迄今为止最简单的:

  1. 早上将数据加载到第一个 jupyter-cell 中,然后在 30 分钟内吃早餐,在一天的剩余时间内计算/探索/可视化:)
© www.soinside.com 2019 - 2024. All rights reserved.