@@ -1095,32 +1095,31 @@ def _reduce(self, name: str, *, skipna: bool = True, **kwargs):
1095
1095
axis = kwargs .pop ("axis" , None )
1096
1096
result = op (data , axis = axis , skipna = skipna , mask = mask , ** kwargs )
1097
1097
if np .isnan (result ):
1098
- result = libmissing .NA
1098
+ return libmissing .NA
1099
1099
1100
- return self . _wrap_reduction_result ( name , result , skipna = skipna , axis = axis )
1100
+ return result
1101
1101
1102
1102
def _reduce_and_wrap (self , name : str , * , skipna : bool = True , kwargs ):
1103
- df = self .reshape (- 1 , 1 )
1104
- res = df ._reduce (name = name , skipna = skipna , axis = 0 , ** kwargs )
1105
- return res
1103
+ res = self ._reduce (name = name , skipna = skipna , ** kwargs )
1104
+ if res is libmissing .NA :
1105
+ return self ._wrap_na_result (name = name , axis = 0 , mask_size = (1 ,))
1106
+ else :
1107
+ res = res .reshape (1 )
1108
+ mask = np .zeros (1 , dtype = bool )
1109
+ return self ._maybe_mask_result (res , mask )
1106
1110
1107
- def _wrap_reduction_result (self , name : str , result , * , mask = None , skipna , axis ):
1111
+ def _wrap_reduction_result (self , name : str , result , * , skipna , axis ):
1108
1112
if isinstance (result , np .ndarray ):
1109
- mask = mask if mask is not None else self ._mask
1110
1113
if skipna :
1111
1114
# we only retain mask for all-NA rows/columns
1112
- mask = mask .all (axis = axis )
1115
+ mask = self . _mask .all (axis = axis )
1113
1116
else :
1114
- mask = mask .any (axis = axis )
1117
+ mask = self . _mask .any (axis = axis )
1115
1118
1116
1119
return self ._maybe_mask_result (result , mask )
1117
- elif result is libmissing .NA and self .ndim == 2 :
1118
- result = self ._wrap_na_result (name = name , axis = axis )
1119
- return result
1120
1120
return result
1121
1121
1122
- def _wrap_na_result (self , * , name , axis ):
1123
- mask_size = self .shape [1 ] if axis == 0 else self .shape [0 ]
1122
+ def _wrap_na_result (self , * , name , axis , mask_size ):
1124
1123
mask = np .ones (mask_size , dtype = bool )
1125
1124
1126
1125
float_dtyp = "float32" if self .dtype == "Float32" else "float64"
0 commit comments