【问题标题】:Using CDO or NCO to combine buoy station datasets (NetCDF), lat and lon gets dropped使用 CDO 或 NCO 组合浮标站数据集 (NetCDF),lat 和 lon 被丢弃
【发布时间】:2021-09-18 08:56:38
【问题描述】:

我正在尝试将 100 多个 NDBC 浮标 netcdf 数据集(其中每个文件都有关联的纬度和经度)合并到一个 netcdf 数据集中。当我使用cdoncrcat 时,我得到一个组合数据集,但它只获取第一个站NetCDF 文件中的纬度和经度坐标。另外,不确定是否可能,但站名(五位数)在每个站文件的属性中,并且在组合时也会丢失,而我希望以某种方式在组合文件中进行每个单独的站名。

理想情况下,这就是我想要的:

  • 完全合并的 NetCDF 文件。
  • 所有纬度和经度都与每个站点的变量相对应。
  • 以某种方式将一个新数据变量附加到合并的数据集,以读取对每个站 NetCDF 文件有价值的站名属性。
  • 时间步长从每 10 分钟、每 30 分钟和每小时变化一次。需要将它们全部对齐,以便每 3 小时重新采样一次并取平均值。

这里是浮标 NetCDF 站数据集之一,看看它的结构:https://dods.ndbc.noaa.gov/thredds/fileServer/data/stdmet/41004/41004h9999.nc

或者,通过 xarray 读取它会产生:

    <xarray.Dataset>
Dimensions:                  (latitude: 1, longitude: 1, time: 48)
Coordinates:
  * time                     (time) datetime64[ns] 2021-04-01T00:50:00 ... 20...
  * latitude                 (latitude) float32 31.4
  * longitude                (longitude) float32 -80.87
Data variables: (12/13)
    wind_dir                 (time, latitude, longitude) float64 ...
    wind_spd                 (time, latitude, longitude) float32 ...
    gust                     (time, latitude, longitude) float32 ...
    wave_height              (time, latitude, longitude) float32 ...
    dominant_wpd             (time, latitude, longitude) timedelta64[ns] ...
    average_wpd              (time, latitude, longitude) timedelta64[ns] ...
    ...                       ...
    air_pressure             (time, latitude, longitude) float32 ...
    air_temperature          (time, latitude, longitude) float32 ...
    sea_surface_temperature  (time, latitude, longitude) float32 ...
    dewpt_temperature        (time, latitude, longitude) float32 ...
    visibility               (time, latitude, longitude) float32 ...
    water_level              (time, latitude, longitude) float32 ...
Attributes:
    institution:  NOAA National Data Buoy Center and Participators in Data As...
    url:          http://dods.ndbc.noaa.gov
    quality:      Automated QC checks with manual editing and comprehensive m...
    conventions:  COARDS
    station:      41008
    comment:      GRAYS REEF - 40 NM Southeast of Savannah, GA
    location:     31.400 N 80.866 W 

我曾尝试转换为 pandas 数据帧并写入 hdf5 文件格式,但一旦创建 hdf5,它就不容易操作了。与 xarray 和 netcdf 相比,我也没有太多使用 hdf5 文件的经验(正在重用预制脚本,这就是输出为 hdf5 的原因)。

我尝试了xarray.mf_dataset(),它可以工作,但是当它应该在 100 MB 左右时会生成一个 4 GB+ 的文件,而且我仍然遇到不保留站名属性数据的问题。我更希望在 python 中完成此操作(目前在 Python 中使用 cdonco 时遇到问题),但也可以从 bash 运行这些命令而不会出现问题。

如果需要更多信息,请告诉我。

【问题讨论】:

    标签: python latitude-longitude netcdf cdo-climate nco


    【解决方案1】:

    我建议你尝试ncecat 与组聚合(gag),例如,

    ncecat -7 --gag in*.nc out.nc
    

    后续评论如下:

    正如参考文档所述,此命令将每个输入文件完整地放入输出文件中自己的组中。如果您没有检查输出中组的内容,而只关注根级别组(仅包含全局元数据和子组),您可能会认为它“删除了我所有的数据变量和值”。使用,例如,

    ncks -m out.nc | more
    

    检查子组:

    zender@sastrugi:~/nco/data$ ncecat -O --gag 85.nc 86.nc 87.nc ~/foo.nc
    zender@sastrugi:~/nco/data$ ncks -m -v lat ~/foo.nc | more
    netcdf foo {
      group: \85 {
        dimensions:
          lat = 2 ;
          vrt_nbr = 2 ;
    
        variables:
          float lat(lat) ;
            lat:long_name = "Latitude (typically midpoints)" ;
            lat:units = "degrees_north" ;
            lat:bounds = "lat_bnd" ;
    
          float lat_bnd(lat,vrt_nbr) ;
            lat_bnd:purpose = "Cell boundaries for lat coordinate" ;
      } // group /85
      group: \86 {
        dimensions:
          lat = 2 ;
          vrt_nbr = 2 ;
    
        variables:
          float lat(lat) ;
            lat:long_name = "Latitude (typically midpoints)" ;
            lat:units = "degrees_north" ;
            lat:bounds = "lat_bnd" ;
    
          float lat_bnd(lat,vrt_nbr) ;
            lat_bnd:purpose = "Cell boundaries for lat coordinate" ;
      } // group /86
      group: \87 {
        dimensions:
          lat = 2 ;
          vrt_nbr = 2 ;
    
        variables:
          float lat(lat) ;
            lat:long_name = "Latitude (typically midpoints)" ;
            lat:units = "degrees_north" ;
            lat:bounds = "lat_bnd" ;
    
          float lat_bnd(lat,vrt_nbr) ;
            lat_bnd:purpose = "Cell boundaries for lat coordinate" ;
      } // group /87
    } // group /
    

    【讨论】:

    • 我用我的文件执行了这个操作,它删除了我所有的数据变量和值。它只将文件名附加到历史记录中,没有其他内容。
    • 谢谢,我不得不走另一条路,因为我仍然无法让 cdo 或 nco 与 python 一起工作。这可能对我有用,但我目前无法在 python 中测试它。
    猜你喜欢
    • 1970-01-01
    • 2015-04-21
    • 2023-02-19
    • 2021-10-29
    • 2019-08-20
    • 2017-10-21
    • 2020-03-24
    • 2022-06-24
    • 2019-03-01
    相关资源
    最近更新 更多