使用 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 一次进行重新网格化,因此计算效率应该很高。
我找到了代码
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 脚本,那么您可以这样做
注意 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 一次进行重新网格化,因此计算效率应该很高。