使用Python从NetCDF文件中提取具有精确坐标的点

3

为了我的项目,我想从一个netCDF文件中提取数据,该文件表示海洋表面温度与纬度/经度的关系。我想选择一个具有精确坐标的点,然后对每个月份的多年平均值进行计算。

import netCDF4 as nc
import numpy as np
import cdo
import os
import pandas as pd

from scipy.io import netcdf

from netCDF4 import Dataset
from netCDF4 import num2date

import matplotlib as mpl
import matplotlib.pylab as plt

from cdo import Cdo
cdo = Cdo()

data = "/Users/bf/Desktop/Stage
tos_Omon_EC-Earth3_historical_r5i1p1f1_gn_185001-201412.nc"

ds = nc.Dataset(data) 
infile = "/Users/bf/Desktop/Stage/tos_Omon_EC-Earth3_historical_r5i1p1f1_gn_185001-201412.nc"


#to select years : 1979-2014     
#new name for the file with the selected years : tos_1979-2014.nc 
cdo.seldate('1979-01-01,2014-12-31', input=infile, output="tos_1979-2014.nc")

#to select longitute and latitute -> no important now
#new name for the file with the selected longitudes/latitudes : tos_1979-2014_2.nc 
cdo.sellonlatbox('-26.45,65.03', input="tos_1979-2014.nc", output="tos_1979-2014_2.nc")

#ymonavg : multi-year monthly statistical values average
cdo.ymonavg(input="tos_1979-2014_2.nc", output="tos_1979-2014_mean_2.nc")

我想提取我的温度数据(自1979年至2014年每个月的平均温度),并将它们放入一个数据框中,以后用mathplolib进行图形处理。

但是使用CDO工具时,我无法选择一个点。也许我需要使用另一个工具,但我不知道该怎么做。

谢谢您的帮助!


你有没有接触过xarray?它旨在使像这样的问题变得更加容易! - Michael Delgado
1个回答

2

要提取特定的网格点,您需要使用重新映射插值,使用最近邻插值。我认为使用Python接口应该是:

cdo.remapnn('lon=-26.45/lat=65.03', input="tos_1979-2014.nc", output="tos_1979-2014_2.nc")

我认为 -

如果有帮助的话,我有一份关于这个主题的视频指南: https://www.youtube.com/watch?v=YdFo8YAbLTw


我能否直接绘制NetCDF数据以获得温度=f(时间)?还是我必须调整我的时间数据?因为似乎我有12个月的年份是绘图的问题,因为我有这个消息:“ValueError:x和y不能大于2D,但形状为(12,)和(12,1,1)” - Berenice
可以的,只需使用array[:,0,0]进行提取或使用numpy.squeeze(array)。 - ClimateUnboxed
我有另一个问题:是否可以对每个时间尺度的一个参数进行求和,然后创建另一个列表来存储这些新数据?我尝试使用“cdo.zonsum”,但我认为它没有考虑时间,所以它不起作用。 - Berenice
嗨,这是一个新问题。最好将其作为单独的问题发布。 - ClimateUnboxed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接