Skip to content

Commit 1374dd1

Browse files
authored
REF: Share Block/ArrayManager set_axis (#41348)
1 parent 4e02f56 commit 1374dd1

File tree

4 files changed

+23
-28
lines changed

4 files changed

+23
-28
lines changed

pandas/core/groupby/generic.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1625,14 +1625,14 @@ def _wrap_transformed_output(
16251625
def _wrap_agged_manager(self, mgr: Manager2D) -> DataFrame:
16261626
if not self.as_index:
16271627
index = np.arange(mgr.shape[1])
1628-
mgr.set_axis(1, ibase.Index(index), verify_integrity=False)
1628+
mgr.set_axis(1, ibase.Index(index))
16291629
result = self.obj._constructor(mgr)
16301630

16311631
self._insert_inaxis_grouper_inplace(result)
16321632
result = result._consolidate()
16331633
else:
16341634
index = self.grouper.result_index
1635-
mgr.set_axis(1, index, verify_integrity=False)
1635+
mgr.set_axis(1, index)
16361636
result = self.obj._constructor(mgr)
16371637

16381638
if self.axis == 1:

pandas/core/internals/array_manager.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -160,21 +160,10 @@ def _normalize_axis(axis: int) -> int:
160160
axis = 1 if axis == 0 else 0
161161
return axis
162162

163-
def set_axis(
164-
self, axis: int, new_labels: Index, verify_integrity: bool = True
165-
) -> None:
163+
def set_axis(self, axis: int, new_labels: Index) -> None:
166164
# Caller is responsible for ensuring we have an Index object.
165+
self._validate_set_axis(axis, new_labels)
167166
axis = self._normalize_axis(axis)
168-
if verify_integrity:
169-
old_len = len(self._axes[axis])
170-
new_len = len(new_labels)
171-
172-
if new_len != old_len:
173-
raise ValueError(
174-
f"Length mismatch: Expected axis has {old_len} elements, new "
175-
f"values have {new_len} elements"
176-
)
177-
178167
self._axes[axis] = new_labels
179168

180169
def consolidate(self: T) -> T:

pandas/core/internals/base.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,23 @@ def ndim(self) -> int:
4444
def shape(self) -> Shape:
4545
return tuple(len(ax) for ax in self.axes)
4646

47+
@final
48+
def _validate_set_axis(self, axis: int, new_labels: Index) -> None:
49+
# Caller is responsible for ensuring we have an Index object.
50+
old_len = len(self.axes[axis])
51+
new_len = len(new_labels)
52+
53+
if axis == 1 and len(self.items) == 0:
54+
# If we are setting the index on a DataFrame with no columns,
55+
# it is OK to change the length.
56+
pass
57+
58+
elif new_len != old_len:
59+
raise ValueError(
60+
f"Length mismatch: Expected axis has {old_len} elements, new "
61+
f"values have {new_len} elements"
62+
)
63+
4764
def reindex_indexer(
4865
self: T,
4966
new_axis,

pandas/core/internals/managers.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -211,20 +211,9 @@ def _normalize_axis(self, axis: int) -> int:
211211
axis = 1 if axis == 0 else 0
212212
return axis
213213

214-
def set_axis(
215-
self, axis: int, new_labels: Index, verify_integrity: bool = True
216-
) -> None:
214+
def set_axis(self, axis: int, new_labels: Index) -> None:
217215
# Caller is responsible for ensuring we have an Index object.
218-
if verify_integrity:
219-
old_len = len(self.axes[axis])
220-
new_len = len(new_labels)
221-
222-
if new_len != old_len:
223-
raise ValueError(
224-
f"Length mismatch: Expected axis has {old_len} elements, new "
225-
f"values have {new_len} elements"
226-
)
227-
216+
self._validate_set_axis(axis, new_labels)
228217
self.axes[axis] = new_labels
229218

230219
@property

0 commit comments

Comments
 (0)