如何在xarray中执行重采样而不会出现pandas Grouper错误?

3df52oht  于 2023-09-29  发布在  其他
关注(0)|答案(2)|浏览(148)

我尝试对xarray DataArray进行重采样,以获得数组在N秒间隔内的平均值。我的DataArray有两个坐标,时间和纬度(LAT_GIN),一维:具有100个时间点的最小版本如下:

# Create a time coordinate
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)

重新采样,例如20秒,我正在使用的线:

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

我期望的输出是一个重采样的DataArray,有五个值(100/20),其中LAT_GIN坐标也是在十个采样周期的每个周期上平均的。
相反,我得到以下错误:

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

ulydmbyx1#

这是Pandas 2.1.0中的一个bug。它在Pandas 1.5.3中运行良好。

yh2wf1be

yh2wf1be2#

将重采样过程分为两部分:一个用于数据本身(da),另一个用于LAT_GIN坐标。然后,将它们再次组合以获得期望的结果:

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

# Create a time coordinate
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)

# Resample
resampled_da = da.resample(time='20S').mean()
resampled_lat = da.coords['LAT_GIN'].resample(time='20S').mean()

# Assign the resampled coordinate back to the DataArray
resampled_da.coords['LAT_GIN'] = resampled_lat

相关问题