Skip to content

Commit 48ee528

Browse files
mroeschkepmhatre1
authored andcommitted
CLN: pandas.concat internal checks (pandas-dev#57996)
1 parent 9a39c14 commit 48ee528

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

pandas/core/reshape/concat.py

+13-12
Original file line numberDiff line numberDiff line change
@@ -661,16 +661,13 @@ def _get_concat_axis(self) -> Index:
661661
indexes, self.keys, self.levels, self.names
662662
)
663663

664-
self._maybe_check_integrity(concat_axis)
665-
666-
return concat_axis
667-
668-
def _maybe_check_integrity(self, concat_index: Index) -> None:
669664
if self.verify_integrity:
670-
if not concat_index.is_unique:
671-
overlap = concat_index[concat_index.duplicated()].unique()
665+
if not concat_axis.is_unique:
666+
overlap = concat_axis[concat_axis.duplicated()].unique()
672667
raise ValueError(f"Indexes have overlapping values: {overlap}")
673668

669+
return concat_axis
670+
674671

675672
def _clean_keys_and_objs(
676673
objs: Iterable[Series | DataFrame] | Mapping[HashableT, Series | DataFrame],
@@ -768,6 +765,12 @@ def _concat_indexes(indexes) -> Index:
768765
return indexes[0].append(indexes[1:])
769766

770767

768+
def validate_unique_levels(levels: list[Index]) -> None:
769+
for level in levels:
770+
if not level.is_unique:
771+
raise ValueError(f"Level values not unique: {level.tolist()}")
772+
773+
771774
def _make_concat_multiindex(indexes, keys, levels=None, names=None) -> MultiIndex:
772775
if (levels is None and isinstance(keys[0], tuple)) or (
773776
levels is not None and len(levels) > 1
@@ -780,6 +783,7 @@ def _make_concat_multiindex(indexes, keys, levels=None, names=None) -> MultiInde
780783
_, levels = factorize_from_iterables(zipped)
781784
else:
782785
levels = [ensure_index(x) for x in levels]
786+
validate_unique_levels(levels)
783787
else:
784788
zipped = [keys]
785789
if names is None:
@@ -789,12 +793,9 @@ def _make_concat_multiindex(indexes, keys, levels=None, names=None) -> MultiInde
789793
levels = [ensure_index(keys).unique()]
790794
else:
791795
levels = [ensure_index(x) for x in levels]
796+
validate_unique_levels(levels)
792797

793-
for level in levels:
794-
if not level.is_unique:
795-
raise ValueError(f"Level values not unique: {level.tolist()}")
796-
797-
if not all_indexes_same(indexes) or not all(level.is_unique for level in levels):
798+
if not all_indexes_same(indexes):
798799
codes_list = []
799800

800801
# things are potentially different sizes, so compute the exact codes

0 commit comments

Comments
 (0)