使用CDO将netCDF转换为CSV文件时出现问题

knsnq2tg  于 2023-07-31  发布在  Etcd
关注(0)|答案(2)|浏览(183)
  • 这篇文章很长,因为我想更好地解释上下文。

我的主要数据源是netCDF格式,我想转换成CSV文件。
有一段时间,我一直在使用Python进行转换。作为一个例子,我使用了一个netCDF数据,该数据之前被修改过(m > mm,hourly > daily),然后被转换成CSV文件。它看起来是这样的:
x1c 0d1x的数据
可以注意到:

  • 第一行包括用逗号分隔的变量名。第二行和向上的值也用逗号分隔。
  • 纬度和经度值不四舍五入。

如上图所示,是所需的数据表示。
之后,我决定使用气候数据操作员(CDO),因为它更容易应用一些功能。在WSL上的Ubuntu中,我将netCDF文件转换成CSV文件。这些是我使用的代码:

首码

cdo -outputtab,date,lat,lon,value era5land_total_precipitation_daily_feb-nov_2017_mm.nc > test-1_tp.csv
输出数据显示为



变量名所在的第一行前面有“#”,如果它不应该出现在那里。此外,值由空格分隔。

第二个代码

cdo -outputtab,date,lat:6,lon:6,value:8 era5land_total_precipitation_daily_feb-nov_2017_mm.nc | grep -v '#' | sed -e 's/ */,/g' >> test-1_tp.csv

第三个代码

cdo -outputtab,date,lat:6,lon:6,value:8 era5land_total_precipitation_daily_feb-nov_2017_mm.nc | sed 's/[[:space:]]/,/g' > test-1_tp.csv
最后两行代码显示了相等的输出

用逗号分隔的值部分解决了这个问题,尽管在一些观察中,最后两个值仍然被空格分隔。此外,顶部没有变量名。

第四码

cdo -outputtab,date,lat:6,lon:6,value:8 era5land_total_precipitation_daily_feb-nov_2017_mm.nc | awk 'FNR==1{ row=$2","$3","$4","$5; print row } FNR1=1{ row=$1","$2","$3","$4; print row}' > test-1_tp.csv
输出包含

最后一个代码的结果是最接近我想要获得的,除了图像内容中的第二行需要删除,纬度/经度值仍然四舍五入。有任何建议来获取像图像1一样的数据集吗?
额外帮助:有人知道这些代码的含义吗?
...| grep -v '#' | sed -e 's/ */,/g'
...| sed 's/[[:space:]]/,/g'
...| awk 'FNR==1{ row=$2","$3","$4","$5; print row } FNR1=1{ row=$1","$2","$3","$4; print row}'
提前感谢!

zbdgwd5y

zbdgwd5y1#

我在另一个论坛上问了同样的问题,得到了以下解决方案:
cdo -outputtab,date,lat:6,lon:6,value:8 infile.nc | grep -v '#' | tr -s ' ' | sed -e 's/ /,/g;s/^.//;s/.$//' >> outfile.csv
记住

  • 第一行包含变量的通用名称:v1、v2、v3和v4,而不是日期、纬度、经度和tp。
  • 所有值都用逗号分隔。
xggvc2p6

xggvc2p62#

我正在转换NetCDF,但经度和纬度的维度不同。有人能解释一下该怎么做吗这里是输出
经度元素数:17 Latitude元件数量:9次:720 tp数量:720

相关问题