我遇到了一个关于从 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)
行需要无限长的时间来执行。
我认为我没有正确提取降水值。
谢谢您的帮助!
我认为您可以通过跳过转换为 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
)以获得更快的速度。
我希望这有助于加快您的数据提取速度。
干杯, 马库斯