You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:48:02