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

如何在xarray中执行重采样以避免pandas Grouper错误?

xarray按时间重采样时报错:TypeError: Grouper.init() got an unexpected keyword argument 'base'

问题场景

尝试对含time和LAT_GIN坐标的xarray DataArray按20秒间隔重采样取均值,复现代码如下:

import pandas as pd
import numpy as np
import xarray as xr

# 创建时间坐标
start_time = pd.Timestamp("2023-09-25 12:34:56")
time_values = pd.date_range(start_time, periods=100, freq="1S")
lat_values = np.random.rand(100).astype(np.float32)
da = xr.DataArray(lat_values, coords={'time': time_values}, dims=['time'])
da.coords['LAT_GIN'] = xr.Variable(('time',), lat_values)

执行重采样代码:

da.resample(time='20S').mean()

预期得到含5个值的重采样结果(100个时间点/20秒间隔),且LAT_GIN坐标同步取均值,但触发错误:

TypeError: Grouper.__init__() got an unexpected keyword argument 'base'

错误原因

这个报错是xarray与pandas版本不兼容导致的:xarray在调用resample时会向pandas的Grouper传递base参数,但旧版本的pandas(低于1.1.0)不支持该参数。

解决方案

方案1:升级pandas版本

直接升级pandas到支持base参数的稳定版本(推荐pandas>=1.1.0),升级后原resample代码即可正常运行。

方案2:手动分组替代resample(无需升级)

如果无法升级依赖,可以通过手动生成时间分组标签,用groupby实现相同的重采样效果:

# 方式1:用pd.cut生成固定间隔的时间分组
time_bins = pd.date_range(start_time, periods=6, freq="20S")
resampled_da = da.groupby(pd.cut(da.time, bins=time_bins)).mean()

# 方式2:将时间向下取整到20秒间隔作为分组键
group_keys = da.time.dt.floor('20S')
resampled_da = da.groupby(group_keys).mean()

两种方式均可得到预期的5个均值结果,同时LAT_GIN坐标会自动按分组取均值。

内容的提问来源于stack exchange,提问作者scs-erin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:12:44