问题描述
我有两个 xArray 数据数组,它们由 datetime64 索引并包含一个功能:一个包含单个字符串的列表。它们的长度不同,我想重新索引一个以匹配另一个的索引。但是,使用 'nearest' 填充方法调用 reindex_like 会在底层 Pandas reindex_like 函数中引发错误(TypeError:不支持的操作数类型 -:'str' 和 'str')。这是完整的跟踪:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-100-a93735b2e55d> in <module>()
----> 1 b_dataarray.reindex_like(d_dataarray,method='nearest')
7 frames
/usr/local/lib/python3.7/dist-packages/xarray/core/dataarray.py in reindex_like(self,other,method,tolerance,copy,fill_value)
1235 tolerance=tolerance,1236 copy=copy,-> 1237 fill_value=fill_value,1238 )
1239
/usr/local/lib/python3.7/dist-packages/xarray/core/dataarray.py in reindex(self,indexers,fill_value,**indexers_kwargs)
1298 tolerance=tolerance,1299 copy=copy,-> 1300 fill_value=fill_value,1301 )
1302 return self._from_temp_dataset(ds)
/usr/local/lib/python3.7/dist-packages/xarray/core/dataset.py in reindex(self,**indexers_kwargs)
2495 fill_value,2496 sparse=False,-> 2497 **indexers_kwargs,2498 )
2499
/usr/local/lib/python3.7/dist-packages/xarray/core/dataset.py in _reindex(self,sparse,**indexers_kwargs)
2526 copy=copy,2527 fill_value=fill_value,-> 2528 sparse=sparse,2529 )
2530 coord_names = set(self._coord_names)
/usr/local/lib/python3.7/dist-packages/xarray/core/alignment.py in reindex_variables(variables,sizes,indexes,sparse)
550 )
551
--> 552 int_indexer = get_indexer_nd(index,target,tolerance)
553
554 # We uses negative values from get_indexer_nd to signify
/usr/local/lib/python3.7/dist-packages/xarray/core/indexing.py in get_indexer_nd(index,labels,tolerance)
101 """
102 flat_labels = np.ravel(labels)
--> 103 flat_indexer = index.get_indexer(flat_labels,method=method,tolerance=tolerance)
104 indexer = flat_indexer.reshape(labels.shape)
105 return indexer
/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/base.py in get_indexer(self,limit,tolerance)
2994 indexer = self._get_fill_indexer(target,tolerance)
2995 elif method == "nearest":
-> 2996 indexer = self._get_nearest_indexer(target,tolerance)
2997 else:
2998 if tolerance is not None:
/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/base.py in _get_nearest_indexer(self,tolerance)
3080
3081 target_values = target._values
-> 3082 left_distances = np.abs(self._values[left_indexer] - target_values)
3083 right_distances = np.abs(self._values[right_indexer] - target_values)
3084
TypeError: unsupported operand type(s) for -: 'str' and 'str'
看起来它是在 Pandas 确定要填充的最近索引的地方抛出的。但是,当数据数组的索引为 datetime64 时,我对为什么它试图减去两个字符串感到困惑。我进行了仔细检查以确保任一数据数组的索引中都没有错误的字符串,并且我可以确认它们都是 datetime64。也许 Pandas 错误地比较了数据数组的数据值而不是日期时间索引?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)