【发布时间】:2021-11-19 14:32:28
【问题描述】:
我有 17,000 个 CSV 文件,每个文件都按时间戳排序(有些缺少数据)。 CSV 文件总大小约为 85GB,比我的 32GB RAM 大得多。
我正在尝试找出将这些数据放入时间对齐、内存不足的数据结构的最佳方法,以便我可以计算诸如 PCA 之类的东西。
什么是正确的方法?
(我尝试使用dim=(filename, time) 设置xarray.DataSet,然后尝试将每个CSV 文件上的xr.merge() 设置为DataSet,但每次插入都会变慢,我希望当 RAM 用完时它会崩溃。)
【问题讨论】:
-
您是否有其他标识符(例如,如果您正在处理财务数据,则为股票代码)?文件是否包含重叠的时间戳? (这对索引很重要)
-
两个问题都是肯定的!
-
好的,这有点棘手,因为多索引
-
我希望创建一个 dim=2 的 xarray,这似乎解决了这个问题?
-
每个文件的时间维度不仅重叠而且相同吗?如果没有,您将遇到更大的问题,因为 xarray 为每个 (x, y) 对分配内存。如果时间维度相同,您可以使用 xr.open_mfdataset 并使用预处理 arg 将文件转换为 DataArrays,然后写入 zarr(可以处理分布式写入)。否则,我会使用带有dask_ml's implementation of PCA 的dask.dataframe?这可以直接在 dask_dataframe 上工作(我认为 - 如果不是,肯定是 dask.array)。
标签: dask python-xarray