diff --git a/pandas/core/dtypes/cast.py b/pandas/core/dtypes/cast.py index d19f19b7224a7..75434fcc2b40d 100644 --- a/pandas/core/dtypes/cast.py +++ b/pandas/core/dtypes/cast.py @@ -12,6 +12,7 @@ is_complex, is_datetimetz, is_categorical_dtype, is_datetimelike, is_extension_type, + is_extension_array_dtype, is_object_dtype, is_datetime64tz_dtype, is_datetime64_dtype, is_datetime64_ns_dtype, @@ -329,7 +330,7 @@ def maybe_promote(dtype, fill_value=np.nan): dtype = np.object_ # in case we have a string that looked like a number - if is_categorical_dtype(dtype): + if is_extension_array_dtype(dtype): pass elif is_datetimetz(dtype): pass diff --git a/pandas/tests/extension/base/reshaping.py b/pandas/tests/extension/base/reshaping.py index 6f4d5b40515be..efc22c19a3eef 100644 --- a/pandas/tests/extension/base/reshaping.py +++ b/pandas/tests/extension/base/reshaping.py @@ -1,4 +1,5 @@ import pytest +import numpy as np import pandas as pd from pandas.core.internals import ExtensionBlock @@ -64,6 +65,19 @@ def test_align_frame(self, data, na_value): self.assert_frame_equal(r1, e1) self.assert_frame_equal(r2, e2) + def test_align_series_frame(self, data, na_value): + # https://github.com/pandas-dev/pandas/issues/20576 + ser = pd.Series(data, name='a') + df = pd.DataFrame({"col": np.arange(len(ser) + 1)}) + r1, r2 = ser.align(df) + + e1 = pd.Series( + data._constructor_from_sequence(list(data) + [na_value]), + name=ser.name) + + self.assert_series_equal(r1, e1) + self.assert_frame_equal(r2, df) + def test_set_frame_expand_regular_with_extension(self, data): df = pd.DataFrame({"A": [1] * len(data)}) df['B'] = data