Python中将时间序列点位数据生成2×2.5°分辨率(time,lat,lon)三维数组
解决方案
核心思路
固定经纬度网格的bins,按日期对原始数据分组,每个时间步使用相同bins生成尺寸一致的二维网格,最后沿时间维度拼接所有二维网格,封装为xarray格式,可直接与同分辨率的气象netCDF数据做匹配分析。
完整实现代码
import numpy as np import pandas as pd import xarray as xr # ---------------------- 1. 定义目标网格参数 ---------------------- # 2°纬度 × 2.5°经度分辨率 bin_lat = np.arange(-90, 90 + 2, 2) # 纬度边界,共91个边界点,生成90个2°间隔格点 bin_lon = np.arange(-180, 180 + 2.5, 2.5) # 经度边界,共145个边界点,生成144个2.5°间隔格点 # 计算格点中心坐标,作为后续xarray的维度坐标 lat_center = (bin_lat[:-1] + bin_lat[1:]) / 2 lon_center = (bin_lon[:-1] + bin_lon[1:]) / 2 # ---------------------- 2. 确认原始数据时间索引格式 ---------------------- df_in.index = pd.to_datetime(df_in.index) # ---------------------- 3. 按日期分组逐时间步网格化 ---------------------- gridded_results = [] time_list = [] for date, day_df in df_in.groupby(df_in.index.date): # 提取当日观测数据 lat = day_df['lat'].values lon = day_df['lon'].values var = day_df['variable'].values # 计算格点内变量总和 sum_var, _, _ = np.histogram2d(lon, lat, bins=(bin_lon, bin_lat), weights=var, density=False) # 计算格点内观测样本数 count, _, _ = np.histogram2d(lon, lat, bins=(bin_lon, bin_lat), density=False) # 计算格点平均值,无观测位置设为NaN(与气象数据缺失值格式兼容) day_grid = np.full(sum_var.shape, np.nan) valid_mask = count > 0 day_grid[valid_mask] = sum_var[valid_mask] / count[valid_mask] # 转置为(纬度, 经度)维度,和主流气象数据维度顺序对齐 day_grid = day_grid.T gridded_results.append(day_grid) time_list.append(date) # ---------------------- 4. 拼接为三维数组,封装为xarray格式 ---------------------- # 沿时间维度拼接,生成(time, lat, lon)三维数组 gridded_3d = np.stack(gridded_results, axis=0) # 封装为xarray Dataset ds = xr.Dataset( data_vars={ 'variable': (['time', 'lat', 'lon'], gridded_3d) }, coords={ 'time': pd.to_datetime(time_list), 'lat': lat_center, 'lon': lon_center } )
后续使用说明
- 缺失值处理:可直接调用xarray内置方法插值,例如
ds['variable'] = ds['variable'].interpolate_na(dim='lat', method='linear')实现纬度方向线性插值。 - 与气象数据对比:读取气象netCDF数据为xarray对象后,可直接用
xr.align(ds, met_ds, join='inner')实现时间、空间维度自动对齐,直接做差值、相关分析等运算。 - 数据导出:可直接用
ds.to_netcdf('gridded_result.nc')导出为netCDF格式,方便后续调用。
内容的提问来源于stack exchange,提问作者Learning_datascience
相关产品推荐
相关产品推荐

