Skip to content

Commit 44f5d69

Browse files
authored
PERF: default_index (#43623)
1 parent 26064f0 commit 44f5d69

File tree

9 files changed

+43
-41
lines changed

9 files changed

+43
-41
lines changed

pandas/core/algorithms.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ def mode(values, dropna: bool = True) -> Series:
947947
mode : Series
948948
"""
949949
from pandas import Series
950-
import pandas.core.indexes.base as ibase
950+
from pandas.core.indexes.api import default_index
951951

952952
values = _ensure_arraylike(values)
953953
original = values
@@ -973,7 +973,7 @@ def mode(values, dropna: bool = True) -> Series:
973973

974974
result = _reconstruct_data(npresult, original.dtype, original)
975975
# Ensure index is type stable (should always use int index)
976-
return Series(result, index=ibase.default_index(len(result)))
976+
return Series(result, index=default_index(len(result)))
977977

978978

979979
def rank(

pandas/core/arrays/sparse/accessor.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -360,16 +360,18 @@ def density(self) -> float:
360360

361361
@staticmethod
362362
def _prep_index(data, index, columns):
363-
from pandas.core.indexes.api import ensure_index
364-
import pandas.core.indexes.base as ibase
363+
from pandas.core.indexes.api import (
364+
default_index,
365+
ensure_index,
366+
)
365367

366368
N, K = data.shape
367369
if index is None:
368-
index = ibase.default_index(N)
370+
index = default_index(N)
369371
else:
370372
index = ensure_index(index)
371373
if columns is None:
372-
columns = ibase.default_index(K)
374+
columns = default_index(K)
373375
else:
374376
columns = ensure_index(columns)
375377

pandas/core/frame.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,11 @@
160160
_shared_docs,
161161
)
162162
from pandas.core.indexers import check_key_length
163-
from pandas.core.indexes import base as ibase
164163
from pandas.core.indexes.api import (
165164
DatetimeIndex,
166165
Index,
167166
PeriodIndex,
167+
default_index,
168168
ensure_index,
169169
ensure_index_from_sequences,
170170
)
@@ -5780,7 +5780,7 @@ class max type
57805780
else:
57815781
new_obj = self.copy()
57825782

5783-
new_index = ibase.default_index(len(new_obj))
5783+
new_index = default_index(len(new_obj))
57845784
if level is not None:
57855785
if not isinstance(level, (tuple, list)):
57865786
level = [level]
@@ -6101,7 +6101,7 @@ def drop_duplicates(
61016101

61026102
result = self[-duplicated]
61036103
if ignore_index:
6104-
result.index = ibase.default_index(len(result))
6104+
result.index = default_index(len(result))
61056105

61066106
if inplace:
61076107
self._update_inplace(result)
@@ -6317,7 +6317,7 @@ def sort_values( # type: ignore[override]
63176317

63186318
if ignore_index:
63196319
new_data.set_axis(
6320-
self._get_block_manager_axis(axis), ibase.default_index(len(indexer))
6320+
self._get_block_manager_axis(axis), default_index(len(indexer))
63216321
)
63226322

63236323
result = self._constructor(new_data)
@@ -8320,7 +8320,7 @@ def explode(
83208320
result = DataFrame({c: df[c].explode() for c in columns})
83218321
result = df.drop(columns, axis=1).join(result)
83228322
if ignore_index:
8323-
result.index = ibase.default_index(len(result))
8323+
result.index = default_index(len(result))
83248324
else:
83258325
result.index = self.index.take(result.index)
83268326
result = result.reindex(columns=self.columns, copy=False)
@@ -10286,7 +10286,7 @@ def f(s):
1028610286
data = data.apply(f, axis=axis)
1028710287
# Ensure index is type stable (should always use int index)
1028810288
if data.empty:
10289-
data.index = ibase.default_index(0)
10289+
data.index = default_index(0)
1029010290

1029110291
return data
1029210292

pandas/core/generic.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,13 @@
125125
)
126126
from pandas.core.describe import describe_ndframe
127127
from pandas.core.flags import Flags
128-
from pandas.core.indexes import base as ibase
129128
from pandas.core.indexes.api import (
130129
DatetimeIndex,
131130
Index,
132131
MultiIndex,
133132
PeriodIndex,
134133
RangeIndex,
134+
default_index,
135135
ensure_index,
136136
)
137137
from pandas.core.internals import (
@@ -4589,7 +4589,7 @@ def sort_index(
45894589

45904590
if ignore_index:
45914591
axis = 1 if isinstance(self, ABCDataFrame) else 0
4592-
new_data.set_axis(axis, ibase.default_index(len(indexer)))
4592+
new_data.set_axis(axis, default_index(len(indexer)))
45934593

45944594
result = self._constructor(new_data)
45954595

@@ -5330,7 +5330,7 @@ def sample(
53305330
result = self.take(sampled_indices, axis=axis)
53315331

53325332
if ignore_index:
5333-
result.index = ibase.default_index(len(result))
5333+
result.index = default_index(len(result))
53345334

53355335
return result
53365336

pandas/core/indexes/api.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
"union_indexes",
6464
"get_unanimous_names",
6565
"all_indexes_same",
66+
"default_index",
6667
]
6768

6869

@@ -287,3 +288,8 @@ def all_indexes_same(indexes) -> bool:
287288
itr = iter(indexes)
288289
first = next(itr)
289290
return all(first.equals(index) for index in itr)
291+
292+
293+
def default_index(n: int) -> RangeIndex:
294+
rng = range(0, n)
295+
return RangeIndex._simple_new(rng, name=None)

pandas/core/indexes/base.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@
168168
DataFrame,
169169
IntervalIndex,
170170
MultiIndex,
171-
RangeIndex,
172171
Series,
173172
)
174173
from pandas.core.arrays import PeriodArray
@@ -6799,12 +6798,6 @@ def _validate_join_method(method: str) -> None:
67996798
raise ValueError(f"do not recognize join method {method}")
68006799

68016800

6802-
def default_index(n: int) -> RangeIndex:
6803-
from pandas.core.indexes.range import RangeIndex
6804-
6805-
return RangeIndex(0, n, name=None)
6806-
6807-
68086801
def maybe_extract_name(name, obj, cls) -> Hashable:
68096802
"""
68106803
If no name is passed, then extract it from data, validating hashability.

pandas/core/internals/construction.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@
6565
range_to_ndarray,
6666
sanitize_array,
6767
)
68-
from pandas.core.indexes import base as ibase
6968
from pandas.core.indexes.api import (
7069
DatetimeIndex,
7170
Index,
7271
TimedeltaIndex,
72+
default_index,
7373
ensure_index,
7474
get_objs_combined_axis,
7575
union_indexes,
@@ -502,9 +502,9 @@ def nested_data_to_arrays(
502502
index = _get_names_from_index(data)
503503
elif isinstance(data[0], Categorical):
504504
# GH#38845 hit in test_constructor_categorical
505-
index = ibase.default_index(len(data[0]))
505+
index = default_index(len(data[0]))
506506
else:
507-
index = ibase.default_index(len(data))
507+
index = default_index(len(data))
508508

509509
return arrays, columns, index
510510

@@ -665,7 +665,7 @@ def _extract_index(data) -> Index:
665665
)
666666
raise ValueError(msg)
667667
else:
668-
index = ibase.default_index(lengths[0])
668+
index = default_index(lengths[0])
669669

670670
# error: Argument 1 to "ensure_index" has incompatible type "Optional[Index]";
671671
# expected "Union[Union[Union[ExtensionArray, ndarray], Index, Series],
@@ -707,7 +707,7 @@ def reorder_arrays(
707707
def _get_names_from_index(data) -> Index:
708708
has_some_name = any(getattr(s, "name", None) is not None for s in data)
709709
if not has_some_name:
710-
return ibase.default_index(len(data))
710+
return default_index(len(data))
711711

712712
index: list[Hashable] = list(range(len(data)))
713713
count = 0
@@ -729,12 +729,12 @@ def _get_axes(
729729
# return axes or defaults
730730

731731
if index is None:
732-
index = ibase.default_index(N)
732+
index = default_index(N)
733733
else:
734734
index = ensure_index(index)
735735

736736
if columns is None:
737-
columns = ibase.default_index(K)
737+
columns = default_index(K)
738738
else:
739739
columns = ensure_index(columns)
740740
return index, columns
@@ -833,7 +833,7 @@ def to_arrays(
833833
stacklevel=4,
834834
)
835835
if columns is None:
836-
columns = ibase.default_index(len(data))
836+
columns = default_index(len(data))
837837
elif len(columns) > len(data):
838838
raise ValueError("len(columns) > len(data)")
839839
elif len(columns) < len(data):
@@ -890,7 +890,7 @@ def _list_of_series_to_arrays(
890890
for s in data:
891891
index = getattr(s, "index", None)
892892
if index is None:
893-
index = ibase.default_index(len(s))
893+
index = default_index(len(s))
894894

895895
if id(index) in indexer_cache:
896896
indexer = indexer_cache[id(index)]
@@ -995,7 +995,7 @@ def _validate_or_indexify_columns(
995995
not equal to length of content
996996
"""
997997
if columns is None:
998-
columns = ibase.default_index(len(content))
998+
columns = default_index(len(content))
999999
else:
10001000

10011001
# Add mask for data which is composed of list of lists

pandas/core/reshape/concat.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@
3838
Index,
3939
MultiIndex,
4040
all_indexes_same,
41+
default_index,
4142
ensure_index,
4243
get_objs_combined_axis,
4344
get_unanimous_names,
4445
)
45-
import pandas.core.indexes.base as ibase
4646
from pandas.core.internals import concatenate_managers
4747

4848
if TYPE_CHECKING:
@@ -619,7 +619,7 @@ def _get_concat_axis(self) -> Index:
619619
if self.bm_axis == 0:
620620
indexes = [x.index for x in self.objs]
621621
elif self.ignore_index:
622-
idx = ibase.default_index(len(self.objs))
622+
idx = default_index(len(self.objs))
623623
return idx
624624
elif self.keys is None:
625625
names: list[Hashable] = [None] * len(self.objs)
@@ -640,14 +640,14 @@ def _get_concat_axis(self) -> Index:
640640
if has_names:
641641
return Index(names)
642642
else:
643-
return ibase.default_index(len(self.objs))
643+
return default_index(len(self.objs))
644644
else:
645645
return ensure_index(self.keys).set_names(self.names)
646646
else:
647647
indexes = [x.axes[self.axis] for x in self.objs]
648648

649649
if self.ignore_index:
650-
idx = ibase.default_index(sum(len(i) for i in indexes))
650+
idx = default_index(sum(len(i) for i in indexes))
651651
return idx
652652

653653
if self.keys is None:

pandas/core/series.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
MultiIndex,
123123
PeriodIndex,
124124
TimedeltaIndex,
125+
default_index,
125126
ensure_index,
126127
)
127128
import pandas.core.indexes.base as ibase
@@ -425,7 +426,7 @@ def __init__(
425426
if index is None:
426427
if not is_list_like(data):
427428
data = [data]
428-
index = ibase.default_index(len(data))
429+
index = default_index(len(data))
429430
elif is_list_like(data):
430431
com.require_length_match(data, index)
431432

@@ -1424,7 +1425,7 @@ def reset_index(self, level=None, drop=False, name=None, inplace=False):
14241425
"""
14251426
inplace = validate_bool_kwarg(inplace, "inplace")
14261427
if drop:
1427-
new_index = ibase.default_index(len(self))
1428+
new_index = default_index(len(self))
14281429
if level is not None:
14291430
if not isinstance(level, (tuple, list)):
14301431
level = [level]
@@ -1745,7 +1746,7 @@ def to_frame(self, name=None) -> DataFrame:
17451746
name = self.name
17461747
if name is None:
17471748
# default to [0], same as we would get with DataFrame(self)
1748-
columns = ibase.default_index(1)
1749+
columns = default_index(1)
17491750
else:
17501751
columns = Index([name])
17511752
else:
@@ -3466,7 +3467,7 @@ def sort_values(
34663467
)
34673468

34683469
if ignore_index:
3469-
result.index = ibase.default_index(len(sorted_index))
3470+
result.index = default_index(len(sorted_index))
34703471

34713472
if inplace:
34723473
self._update_inplace(result)
@@ -4039,7 +4040,7 @@ def explode(self, ignore_index: bool = False) -> Series:
40394040
values, counts = reshape.explode(np.asarray(self._values))
40404041

40414042
if ignore_index:
4042-
index = ibase.default_index(len(values))
4043+
index = default_index(len(values))
40434044
else:
40444045
index = self.index.repeat(counts)
40454046

0 commit comments

Comments
 (0)