@@ -185,20 +185,21 @@ def test_set_index_pass_arrays_duplicate(self, frame_of_index_cols, drop,
185
185
keys = [box1 (df ['A' ]), box2 (df ['A' ])]
186
186
187
187
# == gives ambiguous Boolean for Series
188
- if keys [0 ] is 'A' and keys [1 ] is 'A' :
189
- with tm .assert_raises_regex (ValueError ,
190
- 'Passed duplicate column names.*' ):
191
- df .set_index (keys , drop = drop , append = append )
188
+ if drop and keys [0 ] is 'A' and keys [1 ] is 'A' :
189
+ # can't drop same column twice
190
+ first_drop = False
192
191
else :
193
- result = df . set_index ( keys , drop = drop , append = append )
192
+ first_drop = drop
194
193
195
- # to test against already-tested behavior, we add sequentially,
196
- # hence second append always True; must wrap in list, otherwise
197
- # list-box will be illegal
198
- expected = df .set_index ([keys [0 ]], drop = drop , append = append )
199
- expected = expected .set_index ([keys [1 ]], drop = drop , append = True )
194
+ print (keys )
195
+ # to test against already-tested behavior, we add sequentially,
196
+ # hence second append always True; must wrap in list, otherwise
197
+ # list-box will be illegal
198
+ expected = df .set_index ([keys [0 ]], drop = first_drop , append = append )
199
+ expected = expected .set_index ([keys [1 ]], drop = drop , append = True )
200
200
201
- tm .assert_frame_equal (result , expected )
201
+ result = df .set_index (keys , drop = drop , append = append )
202
+ tm .assert_frame_equal (result , expected )
202
203
203
204
@pytest .mark .parametrize ('append' , [True , False ])
204
205
@pytest .mark .parametrize ('drop' , [True , False ])
@@ -225,15 +226,28 @@ def test_set_index_verify_integrity(self, frame_of_index_cols):
225
226
'Index has duplicate keys' ):
226
227
df .set_index ([df ['A' ], df ['A' ]], verify_integrity = True )
227
228
228
- def test_set_index_raise (self , frame_of_index_cols ):
229
+ @pytest .mark .parametrize ('append' , [True , False ])
230
+ @pytest .mark .parametrize ('drop' , [True , False ])
231
+ def test_set_index_raise (self , frame_of_index_cols , drop , append ):
229
232
df = frame_of_index_cols
230
233
231
- with tm .assert_raises_regex (KeyError , '.*' ): # column names are A-E
232
- df .set_index (['foo' , 'bar' , 'baz' ], verify_integrity = True )
234
+ with tm .assert_raises_regex (KeyError , "['foo', 'bar', 'baz']" ):
235
+ # column names are A-E
236
+ df .set_index (['foo' , 'bar' , 'baz' ], drop = drop , append = append )
233
237
234
238
# non-existent key in list with arrays
235
- with tm .assert_raises_regex (KeyError , '.*' ):
236
- df .set_index ([df ['A' ], df ['B' ], 'X' ], verify_integrity = True )
239
+ with tm .assert_raises_regex (KeyError , 'X' ):
240
+ df .set_index ([df ['A' ], df ['B' ], 'X' ], drop = drop , append = append )
241
+
242
+ rgx = 'keys may only contain a combination of the following:.*'
243
+ # forbidden type, e.g. iterator
244
+ with tm .assert_raises_regex (TypeError , rgx ):
245
+ df .set_index (map (str , df ['A' ]), drop = drop , append = append )
246
+
247
+ # forbidden type in list, e.g. iterator
248
+ with tm .assert_raises_regex (TypeError , rgx ):
249
+ df .set_index (['A' , df ['A' ], map (str , df ['A' ])],
250
+ drop = drop , append = append )
237
251
238
252
def test_construction_with_categorical_index (self ):
239
253
ci = tm .makeCategoricalIndex (10 )
0 commit comments