@@ -100,19 +100,32 @@ def nanskew(values, axis=0, skipna=True, copy=True):
100
100
return result
101
101
102
102
def nanmin (values , axis = 0 , skipna = True , copy = True ):
103
+ mask = isnull (values )
103
104
if skipna and not issubclass (values .dtype .type , np .integer ):
104
105
if copy :
105
106
values = values .copy ()
106
- np .putmask (values , isnull (values ), np .inf )
107
- return values .min (axis )
107
+ np .putmask (values , mask , np .inf )
108
+ result = values .min (axis )
109
+
110
+ null_mask = (mask .shape [axis ] - mask .sum (axis )) == 0
111
+ if null_mask .any ():
112
+ result = result .astype ('f8' )
113
+ result [null_mask ] = np .nan
114
+ return result
108
115
109
116
def nanmax (values , axis = 0 , skipna = True , copy = True ):
117
+ mask = isnull (values )
110
118
if skipna and not issubclass (values .dtype .type , np .integer ):
111
119
if copy :
112
120
values = values .copy ()
113
- np .putmask (values , isnull (values ), - np .inf )
121
+ np .putmask (values , mask , - np .inf )
122
+ result = values .max (axis )
114
123
115
- return values .max (axis )
124
+ null_mask = (mask .shape [axis ] - mask .sum (axis )) == 0
125
+ if null_mask .any ():
126
+ result = result .astype ('f8' )
127
+ result [null_mask ] = np .nan
128
+ return result
116
129
117
130
def nanprod (values , axis = 0 , skipna = True , copy = True ):
118
131
mask = isnull (values )
0 commit comments