【问题标题】:Problems converting netCDF to CSV file using CDO使用 CDO 将 netCDF 转换为 CSV 文件时出现问题
【发布时间】:2021-09-07 12:06:26
【问题描述】:

这篇文章很长,因为我想更好地解释上下文。

我的主要数据源是 netCDF 格式,我想转换成 CSV 文件。

有一段时间,我一直在使用 Python 进行转换。例如,我使用之前修改过的 netCDF 数据(m > mm,每小时 > 每天),然后转换为 CSV 文件。看起来是这样的:

可以注意到:

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

如上图所示是想要的数据呈现方式。

之后,我决定使用气候数据运算符 (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}'

提前非常感谢!

【问题讨论】:

    标签: csv netcdf cdo-climate


    【解决方案1】:

    我在另一个论坛上问过同样的问题,我收到了以下解决方案:

    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。
    • 所有值均以逗号分隔。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-23
      • 2018-05-10
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2017-11-05
      • 2011-09-14
      相关资源
      最近更新 更多