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

标签 csv netcdf cdo-climate

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

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

有一段时间,我一直使用 Python 进行转换。作为示例,我使用之前修改过的 netCDF 数据(米 > 毫米,每小时 > 每天),然后转换为 CSV 文件。它是这样的:

enter image description here

值得注意的是:

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

如上图所示是所需的数据呈现。

之后,我决定使用气候数据运算符(CDO),因为它更容易应用一些功能。在 WSL 上的 Ubuntu 中,我将 netCDF 文件转换为 CSV 文件。这些是我使用的代码:

第一个代码

cdo -outputtab、日期、纬度、经度、值era5land_total_precipitation_daily_feb-nov_2017_mm.nc > test-1_tp.csv

输出数据显示为

enter image description here

变量名称所在的第一行前面不应该有“#”。此外,值由空格分隔。

第二个代码

cdo -outputtab,日期,纬度:6,经度:6,值:8era5land_total_precipitation_daily_feb-nov_2017_mm.nc | grep -v '#' | grep -v '#' | sed -e 's/*/,/g' >> test-1_tp.csv

第三个代码

cdo -outputtab,日期,纬度:6,经度:6,值:8era5land_total_precipitation_daily_feb-nov_2017_mm.nc | sed 's/[[:space:]]/,/g' > test-1_tp.csv

最后两行代码显示相同的输出

enter image description here

问题已通过逗号分隔值得到部分解决,尽管在某些观察中最后两个值仍被空格分隔。另外,顶部没有变量名称。

第四个代码

cdo -outputtab,日期,纬度:6,经度:6,值:8era5land_total_precipitation_daily_feb-nov_2017_mm.nc | awk 'FNR==1{ 行=$2","$3","$4","$5;打印行 } FNR1=1{ 行=$1","$2","$3","$4;打印行}' > test-1_tp.csv

输出包含

enter image description here

最后一个代码的结果最接近我想要获得的结果,除了图像内容中的第二行需要被删除并且纬度/经度值仍然四舍五入。对于获取像图 1 这样的数据集有什么建议吗?

额外帮助:有人知道这些代码的含义吗?

...| grep -v '#' | grep -v '#' | sed -e 's/*/,/g'

...| sed 's/[[:空格:]]/,/g'

...| awk 'FNR==1{ 行=$2","$3","$4","$5;打印行 } FNR1=1{ 行=$1","$2","$3","$4;打印行}'

提前非常感谢!

最佳答案

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

cdo -outputtab,日期,纬度:6,经度:6,值:8 infile.nc | grep -v '#' | grep -v '#' | tr -s ' ' | sed -e 's//,/g;s/^.//;s/.$//' >> outfile.csv

牢记

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

关于csv - 使用 CDO 将 netCDF 转换为 CSV 文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68108231/

相关文章:

python - 从 NETCDF 文件中提取数据的有效方法

python - Xarray 获取数据集中每个月的每小时平均值(无需手动循环?)

bash - 将低于阈值的值设置为 netcdf 文件中的阈值

ubuntu - 合并经纬度不同但时间戳相同的nc文件

python - 在文本文件中存储 Python 实例属性的更好方法是什么?

javascript - 使用街机物理功能时,斜坡在 Phaser 中不起作用

R - 绘制 netcdf 气候数据

Java 程序正在 csv 文件中创建额外的列

javascript - Internet Explorer中的execCommand使用USC-2 Little endian编码保存csv文件,如何以UTF-8格式保存?

r - 如何将旋转的 NetCDF 转换回正常的纬度/经度网格?