首页 > 解决方案 > 如何在 Python 中以高效的方式从数千个大型 NetCDF 文件中提取数据?

问题描述

我有一个包含天气数据的大约 500x1000 点的网格。每个 NetCDF 文件包含一天的数据,而我有几年的数据。我要提取的是每点所有时间的所有天气数据。所以基本上我想将数据分成 500000 个文件,每个文件都有一个点的数据。

就性能而言,哪种方法是最好的?

我尝试将所有 NetCDF 文件加入一个巨大的 NetCDF 文件(大约 400 GB 大)。然后用 xarray 读入并尝试将每个点拆分为一个文件。每点大约需要 30 分钟,所以我正在寻找更快的解决方案。

    import xarray as xr
    dataset = xr.open_dataset(big_nc_path)
    selected_data = dataset.isel(x=12, y=17)
    dataframe = selected_data.to_dataframe()
    dataframe.to_csv(file_path)

更新1:

我现在将文件减少到一年,以便于测试。似乎这在很大程度上是一个 IO 问题,因为我在外部硬盘驱动器上有大文件。现在我把它移到了我的 SSD 上,它的速度要快得多。

当年度文件在外部硬盘驱动器上时提取一个 x,y 组合的时间:10 分 40 秒。

年度文件在 SSD 上时提取一个 x,y 组合的时间:20 秒。

不过仍然对改进感兴趣:) 我在这里发布了 nc_dump -hs 的输出: https ://gist.github.com/robban/fd8f1b0e3228c0b80e93772976dc638a

标签: pythonnetcdfpython-xarray

解决方案


推荐阅读