1 つの時間軸を持つ多次元データ オブジェクトがあります。毎時または毎日などの定期的な時系列に従ってデータをビン化する必要があります (その後、各時間ビン内の相関を計算し、相関時系列を取得するため)。ただし、使用しようとすると、次のようgroupby_bins
になりますTypeError: Cannot cast ufunc less input from dtype('<m8[ns]') to dtype('<m8') with casting rule 'same_kind'
。
# xr is xarray; pd is pandas
In [109]: C = numpy.random.randint(-2000, 2000, dtype='int16', size=(5000, 56, 20))
In [110]: D = xr.DataArray(C, dims=("time", "scanpos", "channel"), coords={"time": pd.date_range("2000-01-01T00:00:00", periods=5000, freq='1min')})
In [111]: D.groupby_bins("time", pd.date_range(*D["time"].data[[0,-1]], freq="1H"))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-111-7e7cda1ad060> in <module>()
----> 1 D.groupby_bins("time", pd.date_range(*D["time"].data[[0,-1]], freq="1H"))
/dev/shm/gerrit/venv/stable-3.5/lib/python3.5/site-packages/xarray/core/common.py in groupby_bins(self, group, bins, right, labels, precision, include_lowest, squeeze)
397 cut_kwargs={'right': right, 'labels': labels,
398 'precision': precision,
--> 399 'include_lowest': include_lowest})
400
401 def rolling(self, min_periods=None, center=False, **windows):
/dev/shm/gerrit/venv/stable-3.5/lib/python3.5/site-packages/xarray/core/groupby.py in __init__(self, obj, group, squeeze, grouper, bins, cut_kwargs)
190 raise TypeError("Can't specify both `grouper` and `bins`.")
191 if bins is not None:
--> 192 binned = pd.cut(group.values, bins, **cut_kwargs)
193 new_dim_name = group.name + '_bins'
194 group = DataArray(binned, group.coords, name=new_dim_name)
/dev/shm/gerrit/venv/stable-3.5/lib/python3.5/site-packages/pandas/tools/tile.py in cut(x, bins, right, labels, retbins, precision, include_lowest)
112 else:
113 bins = np.asarray(bins)
--> 114 if (np.diff(bins) < 0).any():
115 raise ValueError('bins must increase monotonically.')
116
TypeError: Cannot cast ufunc less input from dtype('<m8[ns]') to dtype('<m8') with casting rule 'same_kind'
xarray
sで時間軸を使用するにはどうすればよいgroupby_bins
ですか? 一致するdtypeの時間軸を使用してみましたが、に渡しdtype
てpd.date_range
も効果がないように見え、dtypeが同一の場合でも(このおもちゃの例にない理由はわかりませんが、それは別の質問です)、エラーが残ります。
PS 完全にバイパスするソリューションにも満足していますpd.date_range
。