Skip to content

Commit 31ae9a5

Browse files
authored
CLN: standardize values coercion in Blocks (#37009)
1 parent 136353f commit 31ae9a5

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

pandas/core/internals/blocks.py

+19-11
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,28 @@ def _simple_new(
124124
def __init__(self, values, placement, ndim=None):
125125
self.ndim = self._check_ndim(values, ndim)
126126
self.mgr_locs = placement
127-
self.values = values
127+
self.values = self._maybe_coerce_values(values)
128128

129129
if self._validate_ndim and self.ndim and len(self.mgr_locs) != len(self.values):
130130
raise ValueError(
131131
f"Wrong number of items passed {len(self.values)}, "
132132
f"placement implies {len(self.mgr_locs)}"
133133
)
134134

135+
def _maybe_coerce_values(self, values):
136+
"""
137+
Ensure we have correctly-typed values.
138+
139+
Parameters
140+
----------
141+
values : np.ndarray, ExtensionArray, Index
142+
143+
Returns
144+
-------
145+
np.ndarray or ExtensionArray
146+
"""
147+
return values
148+
135149
def _check_ndim(self, values, ndim):
136150
"""
137151
ndim inference and validation.
@@ -1614,7 +1628,6 @@ def __init__(self, values, placement, ndim=None):
16141628
This will call continue to call __init__ for the other base
16151629
classes mixed in with this Mixin.
16161630
"""
1617-
values = self._maybe_coerce_values(values)
16181631

16191632
# Placement must be converted to BlockPlacement so that we can check
16201633
# its length
@@ -2109,10 +2122,6 @@ class DatetimeBlock(DatetimeLikeBlockMixin, Block):
21092122
__slots__ = ()
21102123
is_datetime = True
21112124

2112-
def __init__(self, values, placement, ndim=None):
2113-
values = self._maybe_coerce_values(values)
2114-
super().__init__(values, placement=placement, ndim=ndim)
2115-
21162125
@property
21172126
def _can_hold_na(self):
21182127
return True
@@ -2366,14 +2375,14 @@ class TimeDeltaBlock(DatetimeLikeBlockMixin, IntBlock):
23662375
is_numeric = False
23672376
fill_value = np.timedelta64("NaT", "ns")
23682377

2369-
def __init__(self, values, placement, ndim=None):
2378+
def _maybe_coerce_values(self, values):
23702379
if values.dtype != TD64NS_DTYPE:
23712380
# e.g. non-nano or int64
23722381
values = TimedeltaArray._from_sequence(values)._data
23732382
if isinstance(values, TimedeltaArray):
23742383
values = values._data
23752384
assert isinstance(values, np.ndarray), type(values)
2376-
super().__init__(values, placement=placement, ndim=ndim)
2385+
return values
23772386

23782387
@property
23792388
def _holder(self):
@@ -2426,11 +2435,10 @@ class ObjectBlock(Block):
24262435
is_object = True
24272436
_can_hold_na = True
24282437

2429-
def __init__(self, values, placement=None, ndim=2):
2438+
def _maybe_coerce_values(self, values):
24302439
if issubclass(values.dtype.type, str):
24312440
values = np.array(values, dtype=object)
2432-
2433-
super().__init__(values, ndim=ndim, placement=placement)
2441+
return values
24342442

24352443
@property
24362444
def is_bool(self):

0 commit comments

Comments
 (0)