Skip to content

Commit c5f0454

Browse files
committed
alternative implementation
1 parent 7bcb004 commit c5f0454

File tree

4 files changed

+10
-4
lines changed

4 files changed

+10
-4
lines changed

pandas/core/construction.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,12 @@ def sanitize_array(
472472

473473
# figure out the dtype from the value (upcast if necessary)
474474
if dtype is None:
475-
dtype, value = infer_dtype_from_scalar(value, pandas_dtype=True)
475+
dtype, new_value = infer_dtype_from_scalar(value, pandas_dtype=True)
476+
477+
# infer_dtype_from_scalar converts periods to their ordinal values
478+
# which we do not want here
479+
if not lib.is_period(value):
480+
value = new_value
476481
else:
477482
# need to possibly convert the value here
478483
value = maybe_cast_to_datetime(value, dtype)

pandas/core/dtypes/cast.py

+1
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,7 @@ def infer_dtype_from_scalar(val, pandas_dtype: bool = False) -> Tuple[DtypeObj,
709709
elif pandas_dtype:
710710
if lib.is_period(val):
711711
dtype = PeriodDtype(freq=val.freq)
712+
val = val.ordinal
712713
elif lib.is_interval(val):
713714
subtype = infer_dtype_from_scalar(val.left, pandas_dtype=True)[0]
714715
dtype = IntervalDtype(subtype=subtype)

pandas/core/indexes/interval.py

-2
Original file line numberDiff line numberDiff line change
@@ -612,8 +612,6 @@ def _maybe_convert_i8(self, key):
612612
if scalar:
613613
# Timestamp/Timedelta
614614
key_dtype, key_i8 = infer_dtype_from_scalar(key, pandas_dtype=True)
615-
if lib.is_period(key):
616-
key_i8 = key.ordinal
617615
else:
618616
# DatetimeIndex/TimedeltaIndex
619617
key_dtype, key_i8 = key.dtype, Index(key.asi8)

pandas/tests/dtypes/cast/test_infer_dtype.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,13 @@ def test_infer_dtype_from_period(freq, pandas_dtype):
8484

8585
if pandas_dtype:
8686
exp_dtype = f"period[{freq}]"
87+
exp_val = p.ordinal
8788
else:
8889
exp_dtype = np.object_
90+
exp_val = p
8991

9092
assert dtype == exp_dtype
91-
assert val == p
93+
assert val == exp_val
9294

9395

9496
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)