Skip to content

Commit d88e0fb

Browse files
authored
REF: remove soft_convert_objects (#50031)
1 parent 5b85b43 commit d88e0fb

File tree

5 files changed

+15
-85
lines changed

5 files changed

+15
-85
lines changed

pandas/core/dtypes/cast.py

-49
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
IntCastingNaNError,
4242
LossySetitemError,
4343
)
44-
from pandas.util._validators import validate_bool_kwarg
4544

4645
from pandas.core.dtypes.common import (
4746
DT64NS_DTYPE,
@@ -952,54 +951,6 @@ def coerce_indexer_dtype(indexer, categories) -> np.ndarray:
952951
return ensure_int64(indexer)
953952

954953

955-
def soft_convert_objects(
956-
values: np.ndarray,
957-
*,
958-
datetime: bool = True,
959-
timedelta: bool = True,
960-
period: bool = True,
961-
copy: bool = True,
962-
) -> ArrayLike:
963-
"""
964-
Try to coerce datetime, timedelta, and numeric object-dtype columns
965-
to inferred dtype.
966-
967-
Parameters
968-
----------
969-
values : np.ndarray[object]
970-
datetime : bool, default True
971-
timedelta : bool, default True
972-
period : bool, default True
973-
copy : bool, default True
974-
975-
Returns
976-
-------
977-
np.ndarray or ExtensionArray
978-
"""
979-
validate_bool_kwarg(datetime, "datetime")
980-
validate_bool_kwarg(timedelta, "timedelta")
981-
validate_bool_kwarg(copy, "copy")
982-
983-
conversion_count = sum((datetime, timedelta))
984-
if conversion_count == 0:
985-
raise ValueError("At least one of datetime or timedelta must be True.")
986-
987-
# Soft conversions
988-
if datetime or timedelta or period:
989-
# GH 20380, when datetime is beyond year 2262, hence outside
990-
# bound of nanosecond-resolution 64-bit integers.
991-
converted = lib.maybe_convert_objects(
992-
values,
993-
convert_datetime=datetime,
994-
convert_timedelta=timedelta,
995-
convert_period=period,
996-
)
997-
if converted is not values:
998-
return converted
999-
1000-
return values
1001-
1002-
1003954
def convert_dtypes(
1004955
input_array: ArrayLike,
1005956
convert_string: bool = True,

pandas/core/generic.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -6354,9 +6354,8 @@ def infer_objects(self: NDFrameT) -> NDFrameT:
63546354
A int64
63556355
dtype: object
63566356
"""
6357-
return self._constructor(
6358-
self._mgr.convert(datetime=True, timedelta=True, copy=True)
6359-
).__finalize__(self, method="infer_objects")
6357+
new_mgr = self._mgr.convert()
6358+
return self._constructor(new_mgr).__finalize__(self, method="infer_objects")
63606359

63616360
@final
63626361
def convert_dtypes(

pandas/core/internals/array_manager.py

+6-13
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
from pandas.core.dtypes.cast import (
3333
ensure_dtype_can_hold_na,
3434
infer_dtype_from_scalar,
35-
soft_convert_objects,
3635
)
3736
from pandas.core.dtypes.common import (
3837
ensure_platform_int,
@@ -375,25 +374,19 @@ def fillna(self: T, value, limit, inplace: bool, downcast) -> T:
375374
def astype(self: T, dtype, copy: bool = False, errors: str = "raise") -> T:
376375
return self.apply(astype_array_safe, dtype=dtype, copy=copy, errors=errors)
377376

378-
def convert(
379-
self: T,
380-
*,
381-
copy: bool = True,
382-
datetime: bool = True,
383-
timedelta: bool = True,
384-
) -> T:
377+
def convert(self: T) -> T:
385378
def _convert(arr):
386379
if is_object_dtype(arr.dtype):
387380
# extract PandasArray for tests that patch PandasArray._typ
388381
arr = np.asarray(arr)
389-
return soft_convert_objects(
382+
return lib.maybe_convert_objects(
390383
arr,
391-
datetime=datetime,
392-
timedelta=timedelta,
393-
copy=copy,
384+
convert_datetime=True,
385+
convert_timedelta=True,
386+
convert_period=True,
394387
)
395388
else:
396-
return arr.copy() if copy else arr
389+
return arr.copy()
397390

398391
return self.apply(_convert)
399392

pandas/core/internals/blocks.py

+5-10
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
find_result_type,
4545
maybe_downcast_to_dtype,
4646
np_can_hold_element,
47-
soft_convert_objects,
4847
)
4948
from pandas.core.dtypes.common import (
5049
ensure_platform_int,
@@ -429,7 +428,7 @@ def _maybe_downcast(self, blocks: list[Block], downcast=None) -> list[Block]:
429428
# but ATM it breaks too much existing code.
430429
# split and convert the blocks
431430

432-
return extend_blocks([blk.convert(datetime=True) for blk in blocks])
431+
return extend_blocks([blk.convert() for blk in blocks])
433432

434433
if downcast is None:
435434
return blocks
@@ -451,8 +450,6 @@ def convert(
451450
self,
452451
*,
453452
copy: bool = True,
454-
datetime: bool = True,
455-
timedelta: bool = True,
456453
) -> list[Block]:
457454
"""
458455
attempt to coerce any object types to better types return a copy
@@ -1967,8 +1964,6 @@ def convert(
19671964
self,
19681965
*,
19691966
copy: bool = True,
1970-
datetime: bool = True,
1971-
timedelta: bool = True,
19721967
) -> list[Block]:
19731968
"""
19741969
attempt to cast any object types to better types return a copy of
@@ -1980,11 +1975,11 @@ def convert(
19801975
# avoid doing .ravel as that might make a copy
19811976
values = values[0]
19821977

1983-
res_values = soft_convert_objects(
1978+
res_values = lib.maybe_convert_objects(
19841979
values,
1985-
datetime=datetime,
1986-
timedelta=timedelta,
1987-
copy=copy,
1980+
convert_datetime=True,
1981+
convert_timedelta=True,
1982+
convert_period=True,
19881983
)
19891984
res_values = ensure_block_shape(res_values, self.ndim)
19901985
return [self.make_block(res_values)]

pandas/core/internals/managers.py

+2-10
Original file line numberDiff line numberDiff line change
@@ -441,18 +441,10 @@ def fillna(self: T, value, limit, inplace: bool, downcast) -> T:
441441
def astype(self: T, dtype, copy: bool = False, errors: str = "raise") -> T:
442442
return self.apply("astype", dtype=dtype, copy=copy, errors=errors)
443443

444-
def convert(
445-
self: T,
446-
*,
447-
copy: bool = True,
448-
datetime: bool = True,
449-
timedelta: bool = True,
450-
) -> T:
444+
def convert(self: T) -> T:
451445
return self.apply(
452446
"convert",
453-
copy=copy,
454-
datetime=datetime,
455-
timedelta=timedelta,
447+
copy=True,
456448
)
457449

458450
def replace(self: T, to_replace, value, inplace: bool) -> T:

0 commit comments

Comments
 (0)