从 netcfd 中提取降水量值

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

我遇到了一个关于从 NetCDF 文件中提取变量的问题。这是我的输入 netcdf 文件的结构:

comephore_all 输出[37]: 尺寸:(x:85,y:99,时间:236664) 坐标:

  • x (x) float64 1.156e+06 1.158e+06 1.158e+06 ... 1.24e+06 1.24e+06
  • y (y) float64 5.075e+05 5.065e+05 5.055e+05 ... 4.105e+05 4.095e+05
  • 时间(时间)对象 '1997-01-01 00:00' ... '2023-12-31 23:00' 数据变量: rr1(时间,y,x)float32 dask.array crs(时间)int32 -2147483647 -2147483647 ... -2147483647 -2147483647 属性: 标题:重新分析 Lames d'eau COMEPHORE 约定:CF-1.6 历史记录:2021 年 3 月 24 日星期三 13:39:53:ncrcat 1997_rr.nc 19... nco_openmp_thread_number:1

我希望将每个站点的降水量值提取到单独的 .csv 文件中。

我进行了初步测试来提取单个站点的值,但速度非常慢。这是代码片段:

indice_x = 1205500
indice_y = 439500
precip_1205500_439500 = comephore_all.sel(x=indice_x, y=indice_y)
df_precip = precip_1205500_439500.to_dataframe(name='EH')[['EH','date']]
df_precip[['date', 'EH']].to_csv(output_path, index=False)

问题不在于编写 CSV 文件,而在于提取降水值。 “df_precip = precip_1205500_439500.to_dataframe(name='EH')[['EH', 'date']]”这一行单个站点需要 40 分钟。

我也尝试过使用 dask :

df_precip = precip_1205500_439500.to_dask_dataframe()
df_precip=df_precip[['time', 'rr1']]
df_precip[['time', 'rr1']].to_csv(output_path)

但是

df_precip[['time', 'rr1']].to_csv(output_path)
行需要无限长的时间来执行。

我认为我没有正确提取降水值。

谢谢您的帮助!

python variables extract netcdf
1个回答
0
投票

我认为您可以通过跳过转换为 DataFrame 并直接将数据写入 CSV 文件来加快该过程。 这可能看起来像这样:

with open(output_path, "w") as f:
    f.write("date,EH\n")
    for i in range(precip_1205500_439500.date.size):
        f.write(f"{precip_1205500_439500.date[i]:f},{precip_1205500_439500.EH[i]:f}\n")

您提到您想对每个位置执行此操作,因此我假设您将遍历所有位置。 在这种情况下,您可能希望切换到基于索引的选择(使用

isel
或方括号而不是
sel
)以获得更快的速度。

我希望这有助于加快您的数据提取速度。

干杯, 马库斯

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.