From 9c120f31b12e18623a60eb1307a675843d1f9879 Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Wed, 3 Mar 2021 10:20:13 +0100 Subject: [PATCH] ENH: ArrayManager.convert without block fallback --- pandas/core/internals/array_manager.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/pandas/core/internals/array_manager.py b/pandas/core/internals/array_manager.py index 998f1ffcf02ee..97d8c11bb5473 100644 --- a/pandas/core/internals/array_manager.py +++ b/pandas/core/internals/array_manager.py @@ -31,6 +31,7 @@ astype_array_safe, find_common_type, infer_dtype_from_scalar, + soft_convert_objects, ) from pandas.core.dtypes.common import ( is_bool_dtype, @@ -515,13 +516,19 @@ def convert( numeric: bool = True, timedelta: bool = True, ) -> ArrayManager: - return self.apply_with_block( - "convert", - copy=copy, - datetime=datetime, - numeric=numeric, - timedelta=timedelta, - ) + def _convert(arr): + if is_object_dtype(arr.dtype): + return soft_convert_objects( + arr, + datetime=datetime, + numeric=numeric, + timedelta=timedelta, + copy=copy, + ) + else: + return arr.copy() if copy else arr + + return self.apply(_convert) def replace(self, value, **kwargs) -> ArrayManager: assert np.ndim(value) == 0, value