@@ -310,13 +310,21 @@ def _ignore_warnings_if(condition):
310
310
yield
311
311
312
312
313
- def _create_nan_agg_method (name , dask_module = dask_array , coerce_strings = False ):
313
+ def _create_nan_agg_method (
314
+ name , dask_module = dask_array , coerce_strings = False , invariant_0d = False
315
+ ):
314
316
from . import nanops
315
317
316
318
def f (values , axis = None , skipna = None , ** kwargs ):
317
319
if kwargs .pop ("out" , None ) is not None :
318
320
raise TypeError (f"`out` is not valid for { name } " )
319
321
322
+ # The data is invariant in the case of 0d data, so do not
323
+ # change the data (and dtype)
324
+ # See https://github.com/pydata/xarray/issues/4885
325
+ if invariant_0d and axis == ():
326
+ return values
327
+
320
328
values = asarray (values )
321
329
322
330
if coerce_strings and values .dtype .kind in "SU" :
@@ -354,28 +362,30 @@ def f(values, axis=None, skipna=None, **kwargs):
354
362
# See ops.inject_reduce_methods
355
363
argmax = _create_nan_agg_method ("argmax" , coerce_strings = True )
356
364
argmin = _create_nan_agg_method ("argmin" , coerce_strings = True )
357
- max = _create_nan_agg_method ("max" , coerce_strings = True )
358
- min = _create_nan_agg_method ("min" , coerce_strings = True )
359
- sum = _create_nan_agg_method ("sum" )
365
+ max = _create_nan_agg_method ("max" , coerce_strings = True , invariant_0d = True )
366
+ min = _create_nan_agg_method ("min" , coerce_strings = True , invariant_0d = True )
367
+ sum = _create_nan_agg_method ("sum" , invariant_0d = True )
360
368
sum .numeric_only = True
361
369
sum .available_min_count = True
362
370
std = _create_nan_agg_method ("std" )
363
371
std .numeric_only = True
364
372
var = _create_nan_agg_method ("var" )
365
373
var .numeric_only = True
366
- median = _create_nan_agg_method ("median" , dask_module = dask_array_compat )
374
+ median = _create_nan_agg_method (
375
+ "median" , dask_module = dask_array_compat , invariant_0d = True
376
+ )
367
377
median .numeric_only = True
368
- prod = _create_nan_agg_method ("prod" )
378
+ prod = _create_nan_agg_method ("prod" , invariant_0d = True )
369
379
prod .numeric_only = True
370
380
prod .available_min_count = True
371
- cumprod_1d = _create_nan_agg_method ("cumprod" )
381
+ cumprod_1d = _create_nan_agg_method ("cumprod" , invariant_0d = True )
372
382
cumprod_1d .numeric_only = True
373
- cumsum_1d = _create_nan_agg_method ("cumsum" )
383
+ cumsum_1d = _create_nan_agg_method ("cumsum" , invariant_0d = True )
374
384
cumsum_1d .numeric_only = True
375
385
unravel_index = _dask_or_eager_func ("unravel_index" )
376
386
377
387
378
- _mean = _create_nan_agg_method ("mean" )
388
+ _mean = _create_nan_agg_method ("mean" , invariant_0d = True )
379
389
380
390
381
391
def _datetime_nanmin (array ):
0 commit comments