@@ -339,6 +339,72 @@ def test_repeated_getitem_dups(self):
339
339
result = df .loc [:,0 ].loc ['A' ]
340
340
assert_series_equal (result ,expected )
341
341
342
+ def test_iloc_exceeds_bounds (self ):
343
+
344
+ # GH6296
345
+ # iloc should allow indexers that exceed the bounds
346
+ df = DataFrame (np .random .random_sample ((20 ,5 )), columns = list ('ABCDE' ))
347
+ expected = df
348
+ result = df .iloc [:,[0 ,1 ,2 ,3 ,4 ,5 ]]
349
+ assert_frame_equal (result ,expected )
350
+
351
+ result = df .iloc [[1 ,30 ]]
352
+ expected = df .iloc [[1 ]]
353
+ assert_frame_equal (result ,expected )
354
+
355
+ result = df .iloc [[1 ,- 30 ]]
356
+ expected = df .iloc [[1 ]]
357
+ assert_frame_equal (result ,expected )
358
+
359
+ result = df .iloc [:,4 :10 ]
360
+ expected = df .iloc [:,4 :]
361
+ assert_frame_equal (result ,expected )
362
+
363
+ result = df .iloc [:,- 4 :- 10 ]
364
+ expected = df .iloc [:,- 4 :]
365
+ assert_frame_equal (result ,expected )
366
+
367
+ result = df .iloc [[100 ]]
368
+ expected = DataFrame (columns = df .columns )
369
+ assert_frame_equal (result ,expected )
370
+
371
+ # still raise on a single indexer
372
+ def f ():
373
+ df .iloc [30 ]
374
+ self .assertRaises (IndexError , f )
375
+
376
+ s = df ['A' ]
377
+ result = s .iloc [[100 ]]
378
+ expected = Series ()
379
+ assert_series_equal (result ,expected )
380
+
381
+ result = s .iloc [[- 100 ]]
382
+ expected = Series ()
383
+ assert_series_equal (result ,expected )
384
+
385
+ # slice
386
+ result = s .iloc [18 :30 ]
387
+ expected = s .iloc [18 :]
388
+ assert_series_equal (result ,expected )
389
+
390
+ # doc example
391
+ df = DataFrame (np .random .randn (5 ,2 ),columns = list ('AB' ))
392
+ result = df .iloc [[4 ,5 ,6 ]]
393
+ expected = df .iloc [[4 ]]
394
+ assert_frame_equal (result ,expected )
395
+
396
+ result = df .iloc [4 :6 ]
397
+ expected = df .iloc [[4 ]]
398
+ assert_frame_equal (result ,expected )
399
+
400
+ result = df .iloc [:,2 :3 ]
401
+ expected = DataFrame (index = df .index )
402
+ assert_frame_equal (result ,expected )
403
+
404
+ result = df .iloc [:,1 :3 ]
405
+ expected = df .iloc [:,[1 ]]
406
+ assert_frame_equal (result ,expected )
407
+
342
408
def test_iloc_getitem_int (self ):
343
409
344
410
# integer
@@ -442,14 +508,6 @@ def test_iloc_getitem_multiindex(self):
442
508
xp = df .xs ('b' ,drop_level = False )
443
509
assert_frame_equal (rs ,xp )
444
510
445
- def test_iloc_getitem_out_of_bounds (self ):
446
-
447
- # out-of-bounds slice
448
- self .assertRaises (IndexError , self .frame_ints .iloc .__getitem__ , tuple ([slice (None ),slice (1 ,5 ,None )]))
449
- self .assertRaises (IndexError , self .frame_ints .iloc .__getitem__ , tuple ([slice (None ),slice (- 5 ,3 ,None )]))
450
- self .assertRaises (IndexError , self .frame_ints .iloc .__getitem__ , tuple ([slice (1 ,5 ,None )]))
451
- self .assertRaises (IndexError , self .frame_ints .iloc .__getitem__ , tuple ([slice (- 5 ,3 ,None )]))
452
-
453
511
def test_iloc_setitem (self ):
454
512
df = self .frame_ints
455
513
@@ -738,12 +796,6 @@ def test_iloc_getitem_frame(self):
738
796
expected = df .ix [[2 ,4 ,6 ,8 ]]
739
797
assert_frame_equal (result , expected )
740
798
741
- # out-of-bounds slice
742
- self .assertRaises (IndexError , df .iloc .__getitem__ , tuple ([slice (None ),slice (1 ,5 ,None )]))
743
- self .assertRaises (IndexError , df .iloc .__getitem__ , tuple ([slice (None ),slice (- 5 ,3 ,None )]))
744
- self .assertRaises (IndexError , df .iloc .__getitem__ , tuple ([slice (1 ,11 ,None )]))
745
- self .assertRaises (IndexError , df .iloc .__getitem__ , tuple ([slice (- 11 ,3 ,None )]))
746
-
747
799
# try with labelled frame
748
800
df = DataFrame (np .random .randn (10 , 4 ), index = list ('abcdefghij' ), columns = list ('ABCD' ))
749
801
0 commit comments