@@ -201,11 +201,13 @@ def _get_fill_value(dtype, fill_value=None, fill_value_typ=None):
201
201
202
202
203
203
def _get_values (values , skipna , fill_value = None , fill_value_typ = None ,
204
- isfinite = False , copy = True , mask = None ):
204
+ isfinite = False , copy = True , mask = None , compute_mask = True ):
205
205
""" utility to get the values view, mask, dtype
206
206
if necessary copy and mask using the specified fill_value
207
207
copy = True will force the copy
208
208
"""
209
+ if skipna :
210
+ compute_mask = True
209
211
210
212
if is_datetime64tz_dtype (values ):
211
213
# com.values_from_object returns M8[ns] dtype instead of tz-aware,
@@ -216,7 +218,7 @@ def _get_values(values, skipna, fill_value=None, fill_value_typ=None,
216
218
values = com .values_from_object (values )
217
219
dtype = values .dtype
218
220
219
- if mask is None :
221
+ if mask is None and compute_mask :
220
222
if isfinite :
221
223
mask = _isfinite (values )
222
224
else :
@@ -362,8 +364,12 @@ def nanany(values, axis=None, skipna=True, mask=None):
362
364
>>> nanops.nanany(s)
363
365
False
364
366
"""
365
- values , mask , dtype , _ , _ = _get_values (values , skipna , False , copy = skipna ,
366
- mask = mask )
367
+ if (hasattr (values , 'dtype' ) and is_bool_dtype (values .dtype ) and
368
+ mask is None ):
369
+ # Assume np.bool cannot store NaNs
370
+ skipna = False
371
+ values , _ , _ , _ , _ = _get_values (values , skipna , False , copy = skipna ,
372
+ mask = mask , compute_mask = False )
367
373
return values .any (axis )
368
374
369
375
@@ -395,8 +401,12 @@ def nanall(values, axis=None, skipna=True, mask=None):
395
401
>>> nanops.nanall(s)
396
402
False
397
403
"""
398
- values , mask , dtype , _ , _ = _get_values (values , skipna , True , copy = skipna ,
399
- mask = mask )
404
+ if (hasattr (values , 'dtype' ) and is_bool_dtype (values .dtype ) and
405
+ mask is None ):
406
+ # Assume np.bool cannot store NaNs
407
+ skipna = False
408
+ values , _ , _ , _ , _ = _get_values (values , skipna , True , copy = skipna ,
409
+ mask = mask , compute_mask = False )
400
410
return values .all (axis )
401
411
402
412
0 commit comments