如何在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
相关产品推荐
相关产品推荐

