python - xArray: reindex_like(method='nearest') TypeError: 不支持的操作数类型 -: 'str' 和 'str'
问题描述
我有两个 xArray 数据数组,它们由 datetime64 索引并包含一个功能:一个包含单个字符串的列表。它们的长度不同,我想重新索引一个以匹配另一个的索引。但是,使用 'nearest' 填充方法调用 reindex_like 会在底层 Pandas reindex_like 函数中引发错误(TypeError: unsupported operand type(s) for -: 'str' and '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, method, tolerance, copy, 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, method, tolerance, copy, fill_value, **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, indexers, method, tolerance, copy, fill_value, 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, indexers, method, tolerance, copy, fill_value, sparse)
550 )
551
--> 552 int_indexer = get_indexer_nd(index, target, method, 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, method, 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, target, method, limit, tolerance)
2994 indexer = self._get_fill_indexer(target, method, limit, tolerance)
2995 elif method == "nearest":
-> 2996 indexer = self._get_nearest_indexer(target, limit, 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, target, limit, 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 错误地比较了数据数组的数据值而不是日期时间索引?
解决方案
我有一个非常相似的问题,老实说,我不确定如何解决它。我通过替换避免使用 reindex_like
ppg_df.reindex_like(ecg_df, method='nearest')
和
ppg_df.reindex(df2.index, method='nearest')
推荐阅读
- angular - 正确重新安装 Angular Material
- angular - 角度验证大小上传
- julia - 终端进程以退出代码 3221226356(Julia 和 VS 代码)终止
- wpf - 带有 DI 的 WPF .net 5 应用程序:从 UserControl 中的 RoutedCommand 访问服务
- swiftui - 如何删除导航链接中的标签视图?
- sql - Hive:将当前年/月/日设置为变量并用于定义文件名
- python - 以多行的块读取文件
- generics - 在 Array1 上创建一个泛型方法
- database - 如果没有数据,TDengine count() 不返回任何内容
- python - 在不解析错误消息的情况下获取有关完整性约束违规错误的信息