如何使用Python将0.25度乘0.25度的气象数据统一为0.5度乘0.5度的气象数据?

我使用的数据为ERA5数据的2米气温【t2m】(附下载链接:https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels-monthly-means?tab=overview),使用Python语言进行处理。ERA5的2米气温数据经纬度分辨率为0.25度乘0.25度,按照工作要求,需要把分辨率降为0.5度乘0.5度,因为Python接触时间不长,我使用的方法为(如下面代码所示)

from netCDF4 import Dataset
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt

file = 'G:\\Data\\TP_and_2mT_1979-2019_Monthly.nc'
a = Dataset(file)

lon = a.variables["longitude"][:]
lon = lon[::2]
lat = a.variables["latitude"][:]
lat = lat[::2]
t2m = a.variables["t2m"][:]
t2m = t2m[-1]
num = 1
for i in range(720):
    t2m = np.delete(t2m, num, axis=1)
    num = num + 1
t2m = t2m - 273.15
t2m1 = np.zeros([361, 720])

lon0 = lon.mean()
lat0 = lat.mean()
m = Basemap(lat_0=lat0, lon_0=lon0)
m.drawparallels(np.arange(-90., 91., 10.), labels=[1, 0, 0, 0], fontsize=5)
m.drawmeridians(np.arange(-180., 181., 20.), labels=[0, 0, 0, 1], fontsize=5)
m.drawcoastlines()
lon1, lat1 = np.meshgrid(lon, lat)
xi, yi = m(lon1, lat1)

for i in range(361):
    for j in range(720):
        t2m1[i, j] = t2m[i, j]

m1 = m.contourf(xi, yi, t2m1, 300, cmap='jet')
Tu_li = m.colorbar(m1, location='bottom', pad="10%")
plt.savefig('G:\\Data_dispose\\Text10', dpi=300)

思路为,使用列表的操作方法,将经纬度隔行隔列取,这样就去掉了一半的经纬度数据,将0.25度分辨率变为0.5度,同时用处理数组的方法,也将气温数据隔行隔列取但是操作的结果出现很大的差错(如生成图)

之后不知道该如何处理,想请教一下大家,我的编程思路有什么错误,或者大家有什么更好的方法处理这个问题,小白向大佬们求教。时间紧张,谢谢大家了。

for i in range(361):



    t2m = np.delete(t2m, num, axis=0)



    num = num + 1

第18行之后加个循环处理掉纬度上的多余数据

你实际操作的时候只是去掉了经度上得一半数据,纬度上的一半数据没有去掉?你看情况是不是这样的。望采纳

这这是把北半球的数据覆盖到全球了

从netcdf读出的lon和lat数组应该是二维的经纬度网格吧?要是能print一下lon.shap、lat.shape、t2m.shape,这个代码就很容易读了。lon[::2]应该写成lon[::2,::2],同样,纬度数组也应如此。另外31-33行想要做什么?直接使用t2m不可以吗?

可以直接用arcgis进行重采样,比您这个方便的多!

另外气象数据从气象官网地理遥感生态网http://www.gisrs.cn这些官方网站上都能获取到高精度的。