From a438f02fd7e20ab1b268b096536170852bbcec62 Mon Sep 17 00:00:00 2001 From: Matthew Roeschke <10647082+mroeschke@users.noreply.github.com> Date: Wed, 25 Jan 2023 14:05:34 -0800 Subject: [PATCH 1/2] BUG: df_empty.convert_dtypes() with pyarrow backend --- pandas/core/arrays/arrow/array.py | 16 +++++++++------- .../tests/frame/methods/test_convert_dtypes.py | 7 +++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/pandas/core/arrays/arrow/array.py b/pandas/core/arrays/arrow/array.py index 0e70b3795bc85..57759af23ddd5 100644 --- a/pandas/core/arrays/arrow/array.py +++ b/pandas/core/arrays/arrow/array.py @@ -137,15 +137,17 @@ def to_pyarrow_type( Convert dtype to a pyarrow type instance. """ if isinstance(dtype, ArrowDtype): - pa_dtype = dtype.pyarrow_dtype + return dtype.pyarrow_dtype elif isinstance(dtype, pa.DataType): - pa_dtype = dtype + return dtype elif dtype: - # Accepts python types too - pa_dtype = pa.from_numpy_dtype(dtype) - else: - pa_dtype = None - return pa_dtype + try: + # Accepts python types too + # Doesn't handle all numpy types + return pa.from_numpy_dtype(dtype) + except pa.ArrowNotImplementedError: + pass + return None class ArrowExtensionArray(OpsMixin, ExtensionArray): diff --git a/pandas/tests/frame/methods/test_convert_dtypes.py b/pandas/tests/frame/methods/test_convert_dtypes.py index aaccaff0c0c42..cac10c4cbfa68 100644 --- a/pandas/tests/frame/methods/test_convert_dtypes.py +++ b/pandas/tests/frame/methods/test_convert_dtypes.py @@ -120,3 +120,10 @@ def test_pyarrow_dtype_backend_from_pandas_nullable(self): } ) tm.assert_frame_equal(result, expected) + + def test_pyarrow_dtype_empty_object(self): + # GH 50970 + expected = pd.DataFrame(columns=[0]) + with pd.option_context("mode.dtype_backend", "pyarrow"): + result = expected.convert_dtypes() + tm.assert_frame_equal(result, expected) From bb68f3d3a5c9ca823f2a913c582985bcd6533e37 Mon Sep 17 00:00:00 2001 From: Matthew Roeschke <10647082+mroeschke@users.noreply.github.com> Date: Wed, 25 Jan 2023 14:53:51 -0800 Subject: [PATCH 2/2] importorskip --- pandas/tests/frame/methods/test_convert_dtypes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/tests/frame/methods/test_convert_dtypes.py b/pandas/tests/frame/methods/test_convert_dtypes.py index cac10c4cbfa68..919d25f5ba993 100644 --- a/pandas/tests/frame/methods/test_convert_dtypes.py +++ b/pandas/tests/frame/methods/test_convert_dtypes.py @@ -123,6 +123,7 @@ def test_pyarrow_dtype_backend_from_pandas_nullable(self): def test_pyarrow_dtype_empty_object(self): # GH 50970 + pytest.importorskip("pyarrow") expected = pd.DataFrame(columns=[0]) with pd.option_context("mode.dtype_backend", "pyarrow"): result = expected.convert_dtypes()