Skip to content

Commit 157087b

Browse files
committed
BUG: set NA in DataFrame.min/max, fix GH #384
1 parent 232be97 commit 157087b

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

pandas/core/nanops.py

+17-4
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,32 @@ def nanskew(values, axis=0, skipna=True, copy=True):
100100
return result
101101

102102
def nanmin(values, axis=0, skipna=True, copy=True):
103+
mask = isnull(values)
103104
if skipna and not issubclass(values.dtype.type, np.integer):
104105
if copy:
105106
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
108115

109116
def nanmax(values, axis=0, skipna=True, copy=True):
117+
mask = isnull(values)
110118
if skipna and not issubclass(values.dtype.type, np.integer):
111119
if copy:
112120
values = values.copy()
113-
np.putmask(values, isnull(values), -np.inf)
121+
np.putmask(values, mask, -np.inf)
122+
result = values.max(axis)
114123

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
116129

117130
def nanprod(values, axis=0, skipna=True, copy=True):
118131
mask = isnull(values)

pandas/tests/test_frame.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -3123,12 +3123,12 @@ def wrapper(x):
31233123
getattr(self.mixed_frame, name)(axis=1)
31243124

31253125
# all NA case
3126-
# if has_skipna:
3127-
# all_na = self.frame * np.NaN
3128-
# r0 = getattr(all_na, name)(axis=0)
3129-
# r1 = getattr(all_na, name)(axis=1)
3130-
# self.assert_(np.isnan(r0).all())
3131-
# self.assert_(np.isnan(r1).all())
3126+
if has_skipna:
3127+
all_na = self.frame * np.NaN
3128+
r0 = getattr(all_na, name)(axis=0)
3129+
r1 = getattr(all_na, name)(axis=1)
3130+
self.assert_(np.isnan(r0).all())
3131+
self.assert_(np.isnan(r1).all())
31323132

31333133
def test_sum_corner(self):
31343134
axis0 = self.empty.sum(0)

0 commit comments

Comments
 (0)