@@ -1814,9 +1814,17 @@ 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
+ casting_keys = self ._get_casting_keys (indexers .keys ())
1818
+ from .dataarray import DataArray
1819
+ for k in casting_keys :
1820
+ if isinstance (indexers [k ], (slice , DataArray , Variable )):
1821
+ pass
1822
+ else :
1823
+ casting_type = getattr (self .coords [k ].values .dtype , "type" )
1824
+ indexers [k ] = casting_type (indexers [k ])
1825
+
1818
1826
pos_indexers , new_indexes = remap_label_indexers (
1819
- self , indexers = casted_indexers , method = method , tolerance = tolerance )
1827
+ self , indexers = indexers , method = method , tolerance = tolerance )
1820
1828
result = self .isel (indexers = pos_indexers , drop = drop )
1821
1829
return result ._overwrite_indexes (new_indexes )
1822
1830
@@ -2324,20 +2332,16 @@ def interp_like(self, other, method='linear', assume_sorted=False,
2324
2332
return ds .interp (numeric_coords , method , assume_sorted , kwargs )
2325
2333
2326
2334
# 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 ():
2335
+ def _get_casting_keys (self , indexers_keys ):
2336
+ casting_keys = []
2337
+ coords_keys = self .coords .keys ()
2338
+ common_keys = list (set (indexers_keys ) & set (coords_keys ))
2339
+ for k in common_keys :
2333
2340
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
+ if (isinstance (coords_var , np .ndarray ) and
2342
+ coords_var .dtype .kind == 'f' ):
2343
+ casting_keys .append (k )
2344
+ return casting_keys
2341
2345
2342
2346
# Helper methods for rename()
2343
2347
def _rename_vars (self , name_dict , dims_dict ):
0 commit comments