File tree 2 files changed +15
-1
lines changed
2 files changed +15
-1
lines changed Original file line number Diff line number Diff line change @@ -160,9 +160,14 @@ def _make_selectors(self):
160
160
comp_index = ensure_platform_int (comp_index )
161
161
stride = self .index .levshape [self .level ] + self .lift
162
162
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' )
163
168
164
169
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 )
166
171
mask .put (selector , True )
167
172
168
173
if mask .sum () < len (self .index ):
Original file line number Diff line number Diff line change @@ -584,6 +584,15 @@ def test_get_dummies_duplicate_columns(self, df):
584
584
tm .assert_frame_equal (result , expected )
585
585
586
586
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
+
587
596
class TestCategoricalReshape (object ):
588
597
589
598
@pytest .mark .filterwarnings ("ignore:\\ nPanel:FutureWarning" )
You can’t perform that action at this time.
0 commit comments