diff --git a/pandas/indexes/range.py b/pandas/indexes/range.py index f4f5745659002..ca12a06b4888e 100644 --- a/pandas/indexes/range.py +++ b/pandas/indexes/range.py @@ -23,13 +23,14 @@ class RangeIndex(Int64Index): Parameters ---------- - start : int (default: 0) + start : int (default: 0), or other RangeIndex instance. + If int and "stop" is not given, interpreted as "stop" instead. stop : int (default: 0) step : int (default: 1) name : object, optional Name to be stored in the index copy : bool, default False - Make a copy of input if its a RangeIndex + Unused, accepted for homogeneity with other index types. """ @@ -46,20 +47,17 @@ def __new__(cls, start=None, stop=None, step=None, name=None, dtype=None, # RangeIndex if isinstance(start, RangeIndex): - if not copy: - return start if name is None: - name = getattr(start, 'name', None) - start, stop, step = start._start, start._stop, start._step + name = start.name + return cls._simple_new(name=name, + **dict(start._get_data_as_items())) # validate the arguments def _ensure_int(value, field): try: new_value = int(value) - except: - new_value = value - - if not com.is_integer(new_value) or new_value != value: + assert(new_value == value) + except (ValueError, AssertionError): raise TypeError("RangeIndex(...) must be called with integers," " {value} was passed for {field}".format( value=type(value).__name__, diff --git a/pandas/tests/indexes/test_range.py b/pandas/tests/indexes/test_range.py index cf7fe67be6401..567d7acd062c3 100644 --- a/pandas/tests/indexes/test_range.py +++ b/pandas/tests/indexes/test_range.py @@ -138,6 +138,16 @@ def test_constructor_range(self): self.assertRaises(TypeError, lambda: Index(range(1, 5, 2), dtype='float64')) + def test_constructor_name(self): + # GH12288 + orig = RangeIndex(10) + orig.name = 'original' + + copy = RangeIndex(orig) + copy.name = 'copy' + + self.assertTrue(orig.name, 'original') + def test_numeric_compat2(self): # validate that we are handling the RangeIndex overrides to numeric ops # and returning RangeIndex where possible