@@ -1814,8 +1814,9 @@ def sel(self, indexers=None, method=None, tolerance=None, drop=False,
1814
1814
DataArray.sel
1815
1815
"""
1816
1816
indexers = either_dict_or_kwargs (indexers , indexers_kwargs , 'sel' )
1817
+ casted_indexers = self ._maybe_cast_floats (indexers )
1817
1818
pos_indexers , new_indexes = remap_label_indexers (
1818
- self , indexers = indexers , method = method , tolerance = tolerance )
1819
+ self , indexers = casted_indexers , method = method , tolerance = tolerance )
1819
1820
result = self .isel (indexers = pos_indexers , drop = drop )
1820
1821
return result ._overwrite_indexes (new_indexes )
1821
1822
@@ -2322,6 +2323,22 @@ def interp_like(self, other, method='linear', assume_sorted=False,
2322
2323
ds = self .reindex (object_coords )
2323
2324
return ds .interp (numeric_coords , method , assume_sorted , kwargs )
2324
2325
2326
+ # Helper method for sel()
2327
+ def _maybe_cast_floats (self , indexers ):
2328
+ """ Cast float labels passed to sel() method to the float
2329
+ types of the corresponding coordinates"""
2330
+ from .dataarray import DataArray
2331
+ casted_indexers = indexers .copy ()
2332
+ for k , v in indexers .items ():
2333
+ coords_var = self .coords [k ].values
2334
+ if isinstance (indexers [k ], (slice , DataArray , Variable )):
2335
+ pass
2336
+ elif (isinstance (coords_var , np .ndarray ) and
2337
+ coords_var .dtype .kind == 'f' ):
2338
+ casting_type = getattr (coords_var .dtype , "type" )
2339
+ casted_indexers [k ] = casting_type (indexers [k ])
2340
+ return casted_indexers
2341
+
2325
2342
# Helper methods for rename()
2326
2343
def _rename_vars (self , name_dict , dims_dict ):
2327
2344
variables = OrderedDict ()
0 commit comments