Skip to content

Commit b6c0f19

Browse files
committed
REF: Special case NumericIndex._concat_same_dtype()
1 parent 2f00159 commit b6c0f19

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

pandas/core/dtypes/concat.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,11 @@ def _concat_datetimetz(to_concat, name=None):
472472
return to_concat[0]._simple_new(new_values, tz=tz, name=name)
473473

474474

475+
def _concat_index_same_dtype(indexes, klass=None):
476+
klass = klass if klass is not None else indexes[0].__class__
477+
return klass(np.concatenate([x._values for x in indexes]))
478+
479+
475480
def _concat_index_asobject(to_concat, name=None):
476481
"""
477482
concat all inputs as object. DatetimeIndex, TimedeltaIndex and
@@ -586,16 +591,15 @@ def _concat_rangeindex_same_dtype(indexes):
586591
elif step is None:
587592
# First non-empty index had only one element
588593
if obj._start == start:
589-
return _concat_index_asobject(indexes)
594+
from pandas import Int64Index
595+
return _concat_index_same_dtype(indexes, klass=Int64Index)
590596
step = obj._start - start
591597

592598
non_consecutive = ((step != obj._step and len(obj) > 1) or
593599
(next is not None and obj._start != next))
594600
if non_consecutive:
595-
# Int64Index._append_same_dtype([ix.astype(int) for ix in indexes])
596-
# would be preferred... but it currently resorts to
597-
# _concat_index_asobject anyway.
598-
return _concat_index_asobject(indexes)
601+
from pandas import Int64Index
602+
return _concat_index_same_dtype(indexes, klass=Int64Index)
599603

600604
if step is not None:
601605
next = obj[-1] + step

pandas/core/indexes/numeric.py

+4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from pandas.core.indexes.base import (
1818
Index, InvalidIndexError, _index_shared_docs)
1919
from pandas.util._decorators import Appender, cache_readonly
20+
import pandas.core.dtypes.concat as _concat
2021
import pandas.core.indexes.base as ibase
2122

2223

@@ -87,6 +88,9 @@ def _assert_safe_casting(cls, data, subarr):
8788
"""
8889
pass
8990

91+
def _concat_same_dtype(self, indexes, name):
92+
return _concat._concat_index_same_dtype(indexes).rename(name)
93+
9094
@property
9195
def is_all_dates(self):
9296
"""

0 commit comments

Comments
 (0)