Skip to content

Commit f03dd5c

Browse files
committed
TST: raise ValueError when no group keys passed, close #1048
1 parent 3044664 commit f03dd5c

File tree

5 files changed

+10
-26
lines changed

5 files changed

+10
-26
lines changed

RELEASE.rst

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ pandas 0.8.0
5959
- Couldn't assign whole array to column in mixed-type DataFrame via .ix
6060
(#1142)
6161
- Fix label slicing issues with float index values (#1167)
62+
- Fix segfault caused by empty groups passed to groupby (#1048)
6263

6364
pandas 0.7.3
6465
============

pandas/core/groupby.py

+3
Original file line numberDiff line numberDiff line change
@@ -1109,6 +1109,9 @@ def _get_grouper(obj, key=None, axis=0, level=None, sort=True):
11091109
ping.name = 'key_%d' % i
11101110
groupings.append(ping)
11111111

1112+
if len(groupings) == 0:
1113+
raise ValueError('No group keys passed!')
1114+
11121115
grouper = Grouper(group_axis, groupings, sort=sort)
11131116

11141117
return grouper, exclusions

pandas/src/generate_code.py

-3
Original file line numberDiff line numberDiff line change
@@ -464,9 +464,6 @@ def groupby_%(name)s(ndarray[%(c_type)s] index, ndarray labels):
464464
cdef list members
465465
cdef object idx, key
466466
467-
if len(labels) == 0:
468-
return list(index)
469-
470467
length = len(index)
471468
472469
for i in range(length):

pandas/src/generated.pyx

-15
Original file line numberDiff line numberDiff line change
@@ -1625,9 +1625,6 @@ def groupby_float64(ndarray[float64_t] index, ndarray labels):
16251625
cdef list members
16261626
cdef object idx, key
16271627

1628-
if len(labels) == 0:
1629-
return list(index)
1630-
16311628
length = len(index)
16321629

16331630
for i in range(length):
@@ -1653,9 +1650,6 @@ def groupby_object(ndarray[object] index, ndarray labels):
16531650
cdef list members
16541651
cdef object idx, key
16551652

1656-
if len(labels) == 0:
1657-
return list(index)
1658-
16591653
length = len(index)
16601654

16611655
for i in range(length):
@@ -1681,9 +1675,6 @@ def groupby_int32(ndarray[int32_t] index, ndarray labels):
16811675
cdef list members
16821676
cdef object idx, key
16831677

1684-
if len(labels) == 0:
1685-
return list(index)
1686-
16871678
length = len(index)
16881679

16891680
for i in range(length):
@@ -1709,9 +1700,6 @@ def groupby_int64(ndarray[int64_t] index, ndarray labels):
17091700
cdef list members
17101701
cdef object idx, key
17111702

1712-
if len(labels) == 0:
1713-
return list(index)
1714-
17151703
length = len(index)
17161704

17171705
for i in range(length):
@@ -1737,9 +1725,6 @@ def groupby_bool(ndarray[uint8_t] index, ndarray labels):
17371725
cdef list members
17381726
cdef object idx, key
17391727

1740-
if len(labels) == 0:
1741-
return list(index)
1742-
17431728
length = len(index)
17441729

17451730
for i in range(length):

pandas/tests/test_groupby.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,6 @@ def test_basic(self):
120120
# corner cases
121121
self.assertRaises(Exception, grouped.aggregate, lambda x: x * 2)
122122

123-
result = self.df.groupby([]).groups
124-
expected = range(len(self.df))
125-
self.assertEqual(tuple(result), tuple(expected))
126-
127123
# tests for first / last / nth
128124
grouped = self.df.groupby('A')
129125
first = grouped.first()
@@ -144,7 +140,9 @@ def test_basic(self):
144140
expected.name ='foo'
145141
assert_series_equal(nth.xs('foo'), expected)
146142

147-
143+
def test_empty_groups(self):
144+
# GH # 1048
145+
self.assertRaises(ValueError, self.df.groupby, [])
148146

149147
def test_groupby_dict_mapping(self):
150148
# GH #679
@@ -1624,10 +1622,10 @@ def test_column_select_via_attr(self):
16241622
def test_rank_apply(self):
16251623
lev1 = np.array([rands(10) for _ in xrange(1000)], dtype=object)
16261624
lev2 = np.array([rands(10) for _ in xrange(130)], dtype=object)
1627-
lab1 = np.random.randint(0, 1000, size=10000)
1628-
lab2 = np.random.randint(0, 130, size=10000)
1625+
lab1 = np.random.randint(0, 1000, size=5000)
1626+
lab2 = np.random.randint(0, 130, size=5000)
16291627

1630-
df = DataFrame({'value' : np.random.randn(10000),
1628+
df = DataFrame({'value' : np.random.randn(5000),
16311629
'key1' : lev1.take(lab1),
16321630
'key2' : lev2.take(lab2)})
16331631

0 commit comments

Comments
 (0)