@@ -339,6 +339,72 @@ def test_repeated_getitem_dups(self):
339339 result = df .loc [:,0 ].loc ['A' ]
340340 assert_series_equal (result ,expected )
341341
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+
342408 def test_iloc_getitem_int (self ):
343409
344410 # integer
@@ -442,14 +508,6 @@ def test_iloc_getitem_multiindex(self):
442508 xp = df .xs ('b' ,drop_level = False )
443509 assert_frame_equal (rs ,xp )
444510
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-
453511 def test_iloc_setitem (self ):
454512 df = self .frame_ints
455513
@@ -738,12 +796,6 @@ def test_iloc_getitem_frame(self):
738796 expected = df .ix [[2 ,4 ,6 ,8 ]]
739797 assert_frame_equal (result , expected )
740798
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-
747799 # try with labelled frame
748800 df = DataFrame (np .random .randn (10 , 4 ), index = list ('abcdefghij' ), columns = list ('ABCD' ))
749801
0 commit comments