使用 CDO 将多值点提取到单个文本文件中

Extract multi value points using CDO into a single text file

我找到了代码

cdo -outputtab, date,value -remapnn,lon=X/lat=Y infile.nc > Outfile.txt

这非常好地只提取了一个点。有什么方法可以使用单个命令行或使用某些脚本从 netcdf 文件中提取多个点的时间序列数据,并在单个文本文件中获取输出?像这样 -

lat-lon1, lat-lon2, lat-lon3

235、256、254

264、246、249

289、278、259

......

我不确定您为什么用 python 标记 cdo 命令查询,您是在寻找 bash 命令脚本解决方案还是 python 代码?

如果您想要一个简单的 bash 脚本,那么您可以这样做 to produce a set of text files and then combine then column-wise using this solution here

注意 1:我删除了“日期”,否则每个条目都会重复日期 - 如果您必须有日期,则从循环中拉出第一个 cdo remap 命令并执行包含“日期”的命令.

注意 2:这将 space 分隔而不是逗号分隔 - 我假设这不是问题

# these are LON/LAT pairs:
for i in "10 3" "2 5" "3 7"; do 
   a=( $i )
   lon=${a[0]}
   lat=${a[1]}
   cdo -outputtab,value -remapnn,lon=${lon}/lat=${lat} infile.nc > pt_lon${lon}_lat${lat}.txt
   # change column title from "value" to "lon-lat vals"  
   sed -i -e "s/value/${lon}-${lat}/" pt_lon${lon}_lat${lat}.txt
done
# now combine the columns - set the e24 to the width that is appropriate
paste pt_*.txt  | pr -t -e24 > output.txt

您可以在 Python 中使用我的包 nctoolkit 解决这个问题,它使用 CDO 作为后端。代码将类似于以下内容:

import pandas as pd
import nctoolkit as nc
# load data
ds = nc.open_data("in.nc")
# define coords you want to regrid to
coords = pd.DataFrame({"lon":[0, 10, 20], "lat":[0, 10, 20]})
# regrid using nn
ds.regrid(coords, "nn")
# convert to pandas df
df = ds.to_dataframe()

在引擎盖下,这将根据指定的坐标生成单个网格文件,然后调用 CDO 一次进行重新网格化,因此计算效率应该很高。