Skip to content

Commit 5f03406

Browse files
committed
BUG: pivot/unstack leading to too many items should raise exception (GH20601)
1 parent 0d6cb3c commit 5f03406

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

pandas/core/reshape/reshape.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,14 @@ def _make_selectors(self):
160160
comp_index = ensure_platform_int(comp_index)
161161
stride = self.index.levshape[self.level] + self.lift
162162
self.full_shape = ngroups, stride
163+
num_entries = np.prod(self.full_shape)
164+
165+
if num_entries < 0:
166+
raise ValueError('Unstack leads to too many (max int32) entries, '
167+
'cannot reshape')
163168

164169
selector = self.sorted_labels[-1] + stride * comp_index + self.lift
165-
mask = np.zeros(np.prod(self.full_shape), dtype=bool)
170+
mask = np.zeros(num_entries, dtype=bool)
166171
mask.put(selector, True)
167172

168173
if mask.sum() < len(self.index):

pandas/tests/reshape/test_reshape.py

+9
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,15 @@ def test_get_dummies_duplicate_columns(self, df):
584584
tm.assert_frame_equal(result, expected)
585585

586586

587+
def test_too_many_items_to_unstack_raises_value_error():
588+
index = pd.MultiIndex.from_arrays([np.arange(979758),
589+
np.arange(979758)],
590+
names=['ind1', 'ind2'])
591+
s = pd.Series(0, index=index)
592+
with tm.assert_raises_regex(ValueError, 'Unstack leads to too many .*'):
593+
s.unstack()
594+
595+
587596
class TestCategoricalReshape(object):
588597

589598
@pytest.mark.filterwarnings("ignore:\\nPanel:FutureWarning")

0 commit comments

Comments
 (0)