From 3077a10bfcb4bf022517be9a0653a3f2a29e3d9f Mon Sep 17 00:00:00 2001 From: Tom Augspurger Date: Fri, 30 Mar 2018 13:58:50 -0500 Subject: [PATCH] BUG: Allow overwriting object columns with EAs Closes https://github.com/pandas-dev/pandas/issues/20555 --- pandas/core/internals.py | 5 ++++- pandas/tests/extension/base/reshaping.py | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pandas/core/internals.py b/pandas/core/internals.py index a0e122d390240..f5956aacf8646 100644 --- a/pandas/core/internals.py +++ b/pandas/core/internals.py @@ -2379,7 +2379,10 @@ def should_store(self, value): return not (issubclass(value.dtype.type, (np.integer, np.floating, np.complexfloating, np.datetime64, np.bool_)) or - is_extension_type(value)) + # TODO(ExtensionArray): remove is_extension_type + # when all extension arrays have been ported. + is_extension_type(value) or + is_extension_array_dtype(value)) def replace(self, to_replace, value, inplace=False, filter=None, regex=False, convert=True, mgr=None): diff --git a/pandas/tests/extension/base/reshaping.py b/pandas/tests/extension/base/reshaping.py index 9b9a614889bef..6f4d5b40515be 100644 --- a/pandas/tests/extension/base/reshaping.py +++ b/pandas/tests/extension/base/reshaping.py @@ -75,3 +75,9 @@ def test_set_frame_expand_extension_with_regular(self, data): df['B'] = [1] * len(data) expected = pd.DataFrame({"A": data, "B": [1] * len(data)}) self.assert_frame_equal(df, expected) + + def test_set_frame_overwrite_object(self, data): + # https://github.com/pandas-dev/pandas/issues/20555 + df = pd.DataFrame({"A": [1] * len(data)}, dtype=object) + df['A'] = data + assert df.dtypes['A'] == data.dtype