Skip to content

Commit 6a2568a

Browse files
stricter edge case checking
1 parent 5cc3240 commit 6a2568a

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

pandas/core/frame.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4454,8 +4454,12 @@ def _set_item_frame_value(self, key, value: DataFrame) -> None:
44544454
cols_droplevel = maybe_droplevels(cols, key)
44554455
if (
44564456
not isinstance(cols_droplevel, MultiIndex)
4457+
and cols_droplevel.dtype.type is str
44574458
and not cols_droplevel.any()
44584459
):
4460+
# if cols_droplevel contains only empty strings,
4461+
# value.reindex(cols_droplevel, axis=1) would be full of NaNs
4462+
# see GH#62518 and GH#61841
44594463
return
44604464
if len(cols_droplevel) and not cols_droplevel.equals(value.columns):
44614465
value = value.reindex(cols_droplevel, axis=1)

pandas/tests/indexing/multiindex/test_multiindex.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,3 +271,12 @@ def test_multiindex_assign_aligns_as_implicit_tuple(self):
271271
df1["C"] = s1
272272
tm.assert_frame_equal(df1, df2)
273273
tm.assert_frame_equal(df1, df3)
274+
275+
# GH 62518
276+
meta = DataFrame(
277+
columns=MultiIndex.from_arrays(
278+
[["a", "a", "z", "z"], pd.Categorical([1, 2, 1, 2])],
279+
),
280+
dtype=object,
281+
)
282+
meta["z"] = meta["z"].astype("int64")

0 commit comments

Comments
 (0)