Skip to content

Commit 6322043

Browse files
jorisvandenbosschejreback
authored andcommitted
BUG: concat of Series of EA and other dtype fails (pandas-dev#20840)
1 parent 563a6ad commit 6322043

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

pandas/core/dtypes/concat.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ def is_nonempty(x):
175175
return _concat_sparse(to_concat, axis=axis, typs=typs)
176176

177177
extensions = [is_extension_array_dtype(x) for x in to_concat]
178-
if any(extensions):
178+
if any(extensions) and axis == 1:
179179
to_concat = [np.atleast_2d(x.astype('object')) for x in to_concat]
180180

181181
if not nonempty:

pandas/tests/extension/base/reshaping.py

+25
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,31 @@ def test_concat_mixed_dtypes(self, data):
6464
expected = pd.concat([df1.astype('object'), df2.astype('object')])
6565
self.assert_frame_equal(result, expected)
6666

67+
result = pd.concat([df1['A'], df2['A']])
68+
expected = pd.concat([df1['A'].astype('object'),
69+
df2['A'].astype('object')])
70+
self.assert_series_equal(result, expected)
71+
72+
def test_concat_columns(self, data, na_value):
73+
df1 = pd.DataFrame({'A': data[:3]})
74+
df2 = pd.DataFrame({'B': [1, 2, 3]})
75+
76+
expected = pd.DataFrame({'A': data[:3], 'B': [1, 2, 3]})
77+
result = pd.concat([df1, df2], axis=1)
78+
self.assert_frame_equal(result, expected)
79+
result = pd.concat([df1['A'], df2['B']], axis=1)
80+
self.assert_frame_equal(result, expected)
81+
82+
# non-aligned
83+
df2 = pd.DataFrame({'B': [1, 2, 3]}, index=[1, 2, 3])
84+
expected = pd.DataFrame({
85+
'A': data._from_sequence(list(data[:3]) + [na_value]),
86+
'B': [np.nan, 1, 2, 3]})
87+
result = pd.concat([df1, df2], axis=1)
88+
self.assert_frame_equal(result, expected)
89+
result = pd.concat([df1['A'], df2['B']], axis=1)
90+
self.assert_frame_equal(result, expected)
91+
6792
def test_align(self, data, na_value):
6893
a = data[:3]
6994
b = data[2:5]

pandas/tests/extension/category/test_categorical.py

+4
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ class TestConstructors(base.BaseConstructorsTests):
6767

6868

6969
class TestReshaping(base.BaseReshapingTests):
70+
@pytest.mark.skip(reason="Unobserved categories preseved in concat.")
71+
def test_concat_columns(self, data, na_value):
72+
pass
73+
7074
@pytest.mark.skip(reason="Unobserved categories preseved in concat.")
7175
def test_align(self, data, na_value):
7276
pass

0 commit comments

Comments
 (0)