Xarray - InvalidIndexError: Reindexing only valid with uniquely valued Index objects
Xarray - InvalidIndexError: Reindexing only valid with uniquely valued Index objects
我正在尝试为我的 netcdf 数据集中给定位置的变量提取时间序列。但是,我收到以下错误:
InvalidIndexError Traceback (most recent call last)
<ipython-input-15-b6afb8b627fc> in <module>
----> 1 streamflow = routedat2['Streamflow_tavg'].sel(lat = 37.75, lon = 97.75, method = 'nearest')
~/anaconda3/lib/python3.7/site-packages/xarray/core/dataarray.py in sel(self, indexers, method, tolerance, drop, **indexers_kwargs)
1059 method=method,
1060 tolerance=tolerance,
-> 1061 **indexers_kwargs,
1062 )
1063 return self._from_temp_dataset(ds)
~/anaconda3/lib/python3.7/site-packages/xarray/core/dataset.py in sel(self, indexers, method, tolerance, drop, **indexers_kwargs)
2064 indexers = either_dict_or_kwargs(indexers, indexers_kwargs, "sel")
2065 pos_indexers, new_indexes = remap_label_indexers(
-> 2066 self, indexers=indexers, method=method, tolerance=tolerance
2067 )
2068 result = self.isel(indexers=pos_indexers, drop=drop)
~/anaconda3/lib/python3.7/site-packages/xarray/core/coordinates.py in remap_label_indexers(obj, indexers, method, tolerance, **indexers_kwargs)
395
396 pos_indexers, new_indexes = indexing.remap_label_indexers(
--> 397 obj, v_indexers, method=method, tolerance=tolerance
398 )
399 # attach indexer's coordinate to pos_indexers
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexing.py in remap_label_indexers(data_obj, indexers, method, tolerance)
268 coords_dtype = data_obj.coords[dim].dtype
269 label = maybe_cast_to_coords_dtype(label, coords_dtype)
--> 270 idxr, new_idx = convert_label_indexer(index, label, dim, method, tolerance)
271 pos_indexers[dim] = idxr
272 if new_idx is not None:
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexing.py in convert_label_indexer(index, label, index_name, method, tolerance)
188 else:
189 indexer = index.get_loc(
--> 190 label.item(), method=method, tolerance=tolerance
191 )
192 elif label.dtype.kind == "b":
~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/numeric.py in get_loc(self, key, method, tolerance)
506 except (TypeError, NotImplementedError):
507 pass
--> 508 return super().get_loc(key, method=method, tolerance=tolerance)
509
510 @cache_readonly
~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2647 except KeyError:
2648 return self._engine.get_loc(self._maybe_cast_indexer(key))
-> 2649 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
2650 if indexer.ndim > 1 or indexer.size > 1:
2651 raise TypeError("get_loc requires scalar valued input")
~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_indexer(self, target, method, limit, tolerance)
2732 if not self.is_unique:
2733 raise InvalidIndexError(
-> 2734 "Reindexing only valid with uniquely valued Index objects"
2735 )
2736
InvalidIndexError: Reindexing only valid with uniquely valued Index objects
我的 xarray 数据集看起来像 this
我在 conda 环境中使用 Xarray 0.15.1。
任何帮助,将不胜感激。
谢谢。
编辑:
根据建议,我能够通过更正经纬度来超越 InvalidIndex 错误。
当前的 xarray 看起来像 this
但是,现在我在执行时遇到以下错误
streamflow = routedat2['Streamflow_tavg'].sel(lat = 5.75 , lon = 97.75, method = 'nearest')
:
KeyError Traceback (most recent call last)
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexing.py in remap_label_indexers(data_obj, indexers, method, tolerance)
256 try:
--> 257 index = data_obj.indexes[dim]
258 except KeyError:
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexes.py in __getitem__(self, key)
58 def __getitem__(self, key):
---> 59 return self._indexes[key]
60
KeyError: 'lat'
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-90-9faf7a9fa8c4> in <module>
----> 1 streamflow = routedat2['Streamflow_tavg'].sel(lat = 5.75 , lon = 97.75, method = 'nearest')
2 print(streamflow.values)
~/anaconda3/lib/python3.7/site-packages/xarray/core/dataarray.py in sel(self, indexers, method, tolerance, drop, **indexers_kwargs)
1059 method=method,
1060 tolerance=tolerance,
-> 1061 **indexers_kwargs,
1062 )
1063 return self._from_temp_dataset(ds)
~/anaconda3/lib/python3.7/site-packages/xarray/core/dataset.py in sel(self, indexers, method, tolerance, drop, **indexers_kwargs)
2064 indexers = either_dict_or_kwargs(indexers, indexers_kwargs, "sel")
2065 pos_indexers, new_indexes = remap_label_indexers(
-> 2066 self, indexers=indexers, method=method, tolerance=tolerance
2067 )
2068 result = self.isel(indexers=pos_indexers, drop=drop)
~/anaconda3/lib/python3.7/site-packages/xarray/core/coordinates.py in remap_label_indexers(obj, indexers, method, tolerance, **indexers_kwargs)
395
396 pos_indexers, new_indexes = indexing.remap_label_indexers(
--> 397 obj, v_indexers, method=method, tolerance=tolerance
398 )
399 # attach indexer's coordinate to pos_indexers
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexing.py in remap_label_indexers(data_obj, indexers, method, tolerance)
260 if method is not None or tolerance is not None:
261 raise ValueError(
--> 262 "cannot supply ``method`` or ``tolerance`` "
263 "when the indexed dimension does not have "
264 "an associated coordinate."
ValueError: cannot supply ``method`` or ``tolerance`` when the indexed dimension does not have an associated coordinate.`
似乎问题出在我首先提取经纬度的方式上。现在解决了。
我正在尝试为我的 netcdf 数据集中给定位置的变量提取时间序列。但是,我收到以下错误:
InvalidIndexError Traceback (most recent call last)
<ipython-input-15-b6afb8b627fc> in <module>
----> 1 streamflow = routedat2['Streamflow_tavg'].sel(lat = 37.75, lon = 97.75, method = 'nearest')
~/anaconda3/lib/python3.7/site-packages/xarray/core/dataarray.py in sel(self, indexers, method, tolerance, drop, **indexers_kwargs)
1059 method=method,
1060 tolerance=tolerance,
-> 1061 **indexers_kwargs,
1062 )
1063 return self._from_temp_dataset(ds)
~/anaconda3/lib/python3.7/site-packages/xarray/core/dataset.py in sel(self, indexers, method, tolerance, drop, **indexers_kwargs)
2064 indexers = either_dict_or_kwargs(indexers, indexers_kwargs, "sel")
2065 pos_indexers, new_indexes = remap_label_indexers(
-> 2066 self, indexers=indexers, method=method, tolerance=tolerance
2067 )
2068 result = self.isel(indexers=pos_indexers, drop=drop)
~/anaconda3/lib/python3.7/site-packages/xarray/core/coordinates.py in remap_label_indexers(obj, indexers, method, tolerance, **indexers_kwargs)
395
396 pos_indexers, new_indexes = indexing.remap_label_indexers(
--> 397 obj, v_indexers, method=method, tolerance=tolerance
398 )
399 # attach indexer's coordinate to pos_indexers
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexing.py in remap_label_indexers(data_obj, indexers, method, tolerance)
268 coords_dtype = data_obj.coords[dim].dtype
269 label = maybe_cast_to_coords_dtype(label, coords_dtype)
--> 270 idxr, new_idx = convert_label_indexer(index, label, dim, method, tolerance)
271 pos_indexers[dim] = idxr
272 if new_idx is not None:
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexing.py in convert_label_indexer(index, label, index_name, method, tolerance)
188 else:
189 indexer = index.get_loc(
--> 190 label.item(), method=method, tolerance=tolerance
191 )
192 elif label.dtype.kind == "b":
~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/numeric.py in get_loc(self, key, method, tolerance)
506 except (TypeError, NotImplementedError):
507 pass
--> 508 return super().get_loc(key, method=method, tolerance=tolerance)
509
510 @cache_readonly
~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2647 except KeyError:
2648 return self._engine.get_loc(self._maybe_cast_indexer(key))
-> 2649 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
2650 if indexer.ndim > 1 or indexer.size > 1:
2651 raise TypeError("get_loc requires scalar valued input")
~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_indexer(self, target, method, limit, tolerance)
2732 if not self.is_unique:
2733 raise InvalidIndexError(
-> 2734 "Reindexing only valid with uniquely valued Index objects"
2735 )
2736
InvalidIndexError: Reindexing only valid with uniquely valued Index objects
我的 xarray 数据集看起来像 this
我在 conda 环境中使用 Xarray 0.15.1。 任何帮助,将不胜感激。 谢谢。
编辑: 根据建议,我能够通过更正经纬度来超越 InvalidIndex 错误。 当前的 xarray 看起来像 this
但是,现在我在执行时遇到以下错误
streamflow = routedat2['Streamflow_tavg'].sel(lat = 5.75 , lon = 97.75, method = 'nearest')
:
KeyError Traceback (most recent call last)
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexing.py in remap_label_indexers(data_obj, indexers, method, tolerance)
256 try:
--> 257 index = data_obj.indexes[dim]
258 except KeyError:
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexes.py in __getitem__(self, key)
58 def __getitem__(self, key):
---> 59 return self._indexes[key]
60
KeyError: 'lat'
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-90-9faf7a9fa8c4> in <module>
----> 1 streamflow = routedat2['Streamflow_tavg'].sel(lat = 5.75 , lon = 97.75, method = 'nearest')
2 print(streamflow.values)
~/anaconda3/lib/python3.7/site-packages/xarray/core/dataarray.py in sel(self, indexers, method, tolerance, drop, **indexers_kwargs)
1059 method=method,
1060 tolerance=tolerance,
-> 1061 **indexers_kwargs,
1062 )
1063 return self._from_temp_dataset(ds)
~/anaconda3/lib/python3.7/site-packages/xarray/core/dataset.py in sel(self, indexers, method, tolerance, drop, **indexers_kwargs)
2064 indexers = either_dict_or_kwargs(indexers, indexers_kwargs, "sel")
2065 pos_indexers, new_indexes = remap_label_indexers(
-> 2066 self, indexers=indexers, method=method, tolerance=tolerance
2067 )
2068 result = self.isel(indexers=pos_indexers, drop=drop)
~/anaconda3/lib/python3.7/site-packages/xarray/core/coordinates.py in remap_label_indexers(obj, indexers, method, tolerance, **indexers_kwargs)
395
396 pos_indexers, new_indexes = indexing.remap_label_indexers(
--> 397 obj, v_indexers, method=method, tolerance=tolerance
398 )
399 # attach indexer's coordinate to pos_indexers
~/anaconda3/lib/python3.7/site-packages/xarray/core/indexing.py in remap_label_indexers(data_obj, indexers, method, tolerance)
260 if method is not None or tolerance is not None:
261 raise ValueError(
--> 262 "cannot supply ``method`` or ``tolerance`` "
263 "when the indexed dimension does not have "
264 "an associated coordinate."
ValueError: cannot supply ``method`` or ``tolerance`` when the indexed dimension does not have an associated coordinate.`
似乎问题出在我首先提取经纬度的方式上。现在解决了。