Skip to content

Commit 85d6cf4

Browse files
jbrockmendelluckyvs1
authored andcommitted
REF: simplify casting (pandas-dev#38404)
1 parent efb2091 commit 85d6cf4

File tree

4 files changed

+10
-29
lines changed

4 files changed

+10
-29
lines changed

pandas/core/arrays/sparse/array.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
astype_nansafe,
2222
construct_1d_arraylike_from_scalar,
2323
find_common_type,
24-
infer_dtype_from_scalar,
2524
maybe_box_datetimelike,
2625
)
2726
from pandas.core.dtypes.common import (
@@ -328,8 +327,8 @@ def __init__(
328327
else:
329328
npoints = sparse_index.length
330329

331-
dtype = infer_dtype_from_scalar(data)[0]
332-
data = construct_1d_arraylike_from_scalar(data, npoints, dtype)
330+
data = construct_1d_arraylike_from_scalar(data, npoints, dtype=None)
331+
dtype = data.dtype
333332

334333
if dtype is not None:
335334
dtype = pandas_dtype(dtype)

pandas/core/construction.py

+2-16
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
construct_1d_arraylike_from_scalar,
2222
construct_1d_ndarray_preserving_na,
2323
construct_1d_object_array_from_listlike,
24-
infer_dtype_from_scalar,
2524
maybe_cast_to_datetime,
2625
maybe_cast_to_integer_array,
2726
maybe_castable,
@@ -480,17 +479,13 @@ def sanitize_array(
480479
subarr = _try_cast(data, dtype, copy, raise_cast_failure)
481480
else:
482481
subarr = maybe_convert_platform(data)
483-
484-
subarr = maybe_cast_to_datetime(subarr, dtype)
482+
subarr = maybe_cast_to_datetime(subarr, dtype)
485483

486484
elif isinstance(data, range):
487485
# GH#16804
488486
arr = np.arange(data.start, data.stop, data.step, dtype="int64")
489487
subarr = _try_cast(arr, dtype, copy, raise_cast_failure)
490488
elif lib.is_scalar(data) and index is not None and dtype is not None:
491-
data = maybe_cast_to_datetime(data, dtype)
492-
if not lib.is_scalar(data):
493-
data = data[0]
494489
subarr = construct_1d_arraylike_from_scalar(data, len(index), dtype)
495490
else:
496491
subarr = _try_cast(data, dtype, copy, raise_cast_failure)
@@ -500,16 +495,7 @@ def sanitize_array(
500495
if isinstance(data, list): # pragma: no cover
501496
subarr = np.array(data, dtype=object)
502497
elif index is not None:
503-
value = data
504-
505-
# figure out the dtype from the value (upcast if necessary)
506-
if dtype is None:
507-
dtype, value = infer_dtype_from_scalar(value, pandas_dtype=True)
508-
else:
509-
# need to possibly convert the value here
510-
value = maybe_cast_to_datetime(value, dtype)
511-
512-
subarr = construct_1d_arraylike_from_scalar(value, len(index), dtype)
498+
subarr = construct_1d_arraylike_from_scalar(data, len(index), dtype)
513499

514500
else:
515501
return subarr.item()

pandas/core/dtypes/cast.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -1566,7 +1566,7 @@ def find_common_type(types: List[DtypeObj]) -> DtypeObj:
15661566

15671567

15681568
def construct_1d_arraylike_from_scalar(
1569-
value: Scalar, length: int, dtype: DtypeObj
1569+
value: Scalar, length: int, dtype: Optional[DtypeObj]
15701570
) -> ArrayLike:
15711571
"""
15721572
create a np.ndarray / pandas type of specified shape and dtype
@@ -1583,6 +1583,10 @@ def construct_1d_arraylike_from_scalar(
15831583
np.ndarray / pandas type of length, filled with value
15841584
15851585
"""
1586+
1587+
if dtype is None:
1588+
dtype, value = infer_dtype_from_scalar(value, pandas_dtype=True)
1589+
15861590
if is_extension_array_dtype(dtype):
15871591
cls = dtype.construct_array_type()
15881592
subarr = cls._from_sequence([value] * length, dtype=dtype)

pandas/core/frame.py

+1-9
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@
8383
infer_dtype_from_scalar,
8484
invalidate_string_dtypes,
8585
maybe_box_datetimelike,
86-
maybe_cast_to_datetime,
8786
maybe_casted_values,
8887
maybe_convert_platform,
8988
maybe_downcast_to_dtype,
@@ -3942,14 +3941,7 @@ def reindexer(value):
39423941
value = maybe_infer_to_datetimelike(value)
39433942

39443943
else:
3945-
# cast ignores pandas dtypes. so save the dtype first
3946-
infer_dtype, fill_value = infer_dtype_from_scalar(value, pandas_dtype=True)
3947-
3948-
value = construct_1d_arraylike_from_scalar(
3949-
fill_value, len(self), infer_dtype
3950-
)
3951-
3952-
value = maybe_cast_to_datetime(value, infer_dtype)
3944+
value = construct_1d_arraylike_from_scalar(value, len(self), dtype=None)
39533945

39543946
# return internal types directly
39553947
if is_extension_array_dtype(value):

0 commit comments

Comments
 (0)