diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index bfddd2e78c322..0697f9d826f97 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -903,7 +903,8 @@ def _convert_to_indexer(self, obj, axis=0, is_setter=False): return {'key': obj} # a positional - if obj >= len(self.obj) and not isinstance(labels, MultiIndex): + if (obj >= self.obj.shape[axis] and + not isinstance(labels, MultiIndex)): raise ValueError("cannot set by positional indexing with " "enlargement") diff --git a/pandas/tests/test_indexing.py b/pandas/tests/test_indexing.py index d68ead4a69d9e..bf1709c78822f 100644 --- a/pandas/tests/test_indexing.py +++ b/pandas/tests/test_indexing.py @@ -2352,6 +2352,14 @@ def check_slicing_positional(index): #self.assertRaises(TypeError, lambda : s.iloc[2.0:5.0]) #self.assertRaises(TypeError, lambda : s.iloc[2:5.0]) + def test_set_ix_out_of_bounds_axis_0(self): + df = pd.DataFrame(randn(2, 5), index=["row%s" % i for i in range(2)], columns=["col%s" % i for i in range(5)]) + self.assertRaises(ValueError, df.ix.__setitem__, (2, 0), 100) + + def test_set_ix_out_of_bounds_axis_1(self): + df = pd.DataFrame(randn(5, 2), index=["row%s" % i for i in range(5)], columns=["col%s" % i for i in range(2)]) + self.assertRaises(ValueError, df.ix.__setitem__, (0 , 2), 100) + if __name__ == '__main__': import nose