Skip to content

Commit 6a0863f

Browse files
committed
BUG: len-0 Series min/max/describe #1650
1 parent 94d2e1d commit 6a0863f

File tree

4 files changed

+32
-21
lines changed

4 files changed

+32
-21
lines changed

RELEASE.rst

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ pandas 0.8.1
9494
- Ensure string alias converted (valid in DatetimeIndex.get_loc) in
9595
DataFrame.xs / __getitem__ (#1644)
9696
- Fix use of string alias timestamps with tz-aware time series (#1647)
97+
- Fix Series.max/min and Series.describe on len-0 series (#1650)
9798

9899
pandas 0.8.0
99100
============

pandas/core/nanops.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,12 @@ def _nanmin(values, axis=None, skipna=True):
151151
else:
152152
result = __builtin__.min(values)
153153
else:
154-
result = values.min(axis)
154+
if ((axis is not None and values.shape[axis] == 0)
155+
or values.size == 0):
156+
result = values.sum(axis)
157+
result.fill(np.nan)
158+
else:
159+
result = values.min(axis)
155160

156161
return _maybe_null_out(result, axis, mask)
157162

@@ -172,7 +177,13 @@ def _nanmax(values, axis=None, skipna=True):
172177
else:
173178
result = __builtin__.max(values)
174179
else:
175-
result = values.max(axis)
180+
if ((axis is not None and values.shape[axis] == 0)
181+
or values.size == 0):
182+
result = values.sum(axis)
183+
result.fill(np.nan)
184+
else:
185+
result = values.max(axis)
186+
176187
return _maybe_null_out(result, axis, mask)
177188

178189
def nanargmax(values, axis=None, skipna=True):

pandas/core/series.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -1378,12 +1378,11 @@ def pretty_name(x):
13781378

13791379
names = ['count']
13801380
data = [self.count()]
1381-
if data[0] > 0:
1382-
names += ['mean', 'std', 'min', pretty_name(lb), '50%',
1383-
pretty_name(ub), 'max']
1384-
data += [self.mean(), self.std(), self.min(),
1385-
self.quantile(lb), self.median(), self.quantile(ub),
1386-
self.max()]
1381+
names += ['mean', 'std', 'min', pretty_name(lb), '50%',
1382+
pretty_name(ub), 'max']
1383+
data += [self.mean(), self.std(), self.min(),
1384+
self.quantile(lb), self.median(), self.quantile(ub),
1385+
self.max()]
13871386

13881387
return Series(data, index=names)
13891388

pandas/tests/test_series.py

+13-13
Original file line numberDiff line numberDiff line change
@@ -210,12 +210,6 @@ def setUp(self):
210210

211211
self.empty = Series([], index=[])
212212

213-
self.noneSeries = Series([None])
214-
self.noneSeries.name = 'None'
215-
216-
self.nanSeries = Series([np.nan])
217-
self.nanSeries.name = 'NaN'
218-
219213
def test_constructor(self):
220214
# Recognize TimeSeries
221215
self.assert_(isinstance(self.ts, TimeSeries))
@@ -1256,17 +1250,23 @@ def test_describe_objects(self):
12561250
assert_series_equal(rs, xp)
12571251

12581252
def test_describe_empty(self):
1259-
assert_series_equal(self.empty.describe(),
1260-
Series([0], index=['count']))
1253+
result = self.empty.describe()
1254+
1255+
self.assert_(result['count'] == 0)
1256+
self.assert_(result.drop('count').isnull().all())
1257+
1258+
nanSeries = Series([np.nan])
1259+
nanSeries.name = 'NaN'
1260+
result = nanSeries.describe()
1261+
self.assert_(result['count'] == 0)
1262+
self.assert_(result.drop('count').isnull().all())
12611263

12621264
def test_describe_none(self):
1263-
assert_series_equal(self.noneSeries.describe(),
1265+
noneSeries = Series([None])
1266+
noneSeries.name = 'None'
1267+
assert_series_equal(noneSeries.describe(),
12641268
Series([0, 0], index=['count', 'unique']))
12651269

1266-
def test_describe_nan(self):
1267-
assert_series_equal(self.nanSeries.describe(),
1268-
Series([0], index=['count']))
1269-
12701270
def test_append(self):
12711271
appendedSeries = self.series.append(self.objSeries)
12721272
for idx, value in appendedSeries.iteritems():

0 commit comments

Comments
 (0)