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.`


似乎问题出在我首先提取经纬度的方式上。现在解决了。