Skip to content

Commit 48d9cf7

Browse files
jbrockmendelquintusdias
authored andcommitted
CLN: de-kludge Block.quantile (pandas-dev#27627)
1 parent 3b84673 commit 48d9cf7

File tree

1 file changed

+14
-25
lines changed

1 file changed

+14
-25
lines changed

pandas/core/internals/blocks.py

+14-25
Original file line numberDiff line numberDiff line change
@@ -1526,18 +1526,7 @@ def quantile(self, qs, interpolation="linear", axis=0):
15261526
# We should always have ndim == 2 becase Series dispatches to DataFrame
15271527
assert self.ndim == 2
15281528

1529-
if self.is_datetimetz:
1530-
# TODO: cleanup this special case.
1531-
# We need to operate on i8 values for datetimetz
1532-
# but `Block.get_values()` returns an ndarray of objects
1533-
# right now. We need an API for "values to do numeric-like ops on"
1534-
values = self.values.view("M8[ns]")
1535-
1536-
# TODO: NonConsolidatableMixin shape
1537-
# Usual shape inconsistencies for ExtensionBlocks
1538-
values = values[None, :]
1539-
else:
1540-
values = self.get_values()
1529+
values = self.get_values()
15411530

15421531
is_empty = values.shape[axis] == 0
15431532
orig_scalar = not is_list_like(qs)
@@ -1576,7 +1565,6 @@ def quantile(self, qs, interpolation="linear", axis=0):
15761565
result = lib.item_from_zerodim(result)
15771566

15781567
ndim = getattr(result, "ndim", None) or 0
1579-
result = self._try_coerce_result(result)
15801568
return make_block(result, placement=np.arange(len(result)), ndim=ndim)
15811569

15821570
def _replace_coerce(
@@ -2477,21 +2465,9 @@ def _try_coerce_result(self, result):
24772465
result = self._holder._from_sequence(
24782466
result.astype(np.int64), freq=None, dtype=self.values.dtype
24792467
)
2480-
elif result.dtype == "M8[ns]":
2481-
# otherwise we get here via quantile and already have M8[ns]
2482-
result = self._holder._simple_new(
2483-
result, freq=None, dtype=self.values.dtype
2484-
)
24852468

2486-
elif isinstance(result, np.datetime64):
2487-
# also for post-quantile
2488-
result = self._box_func(result)
24892469
return result
24902470

2491-
@property
2492-
def _box_func(self):
2493-
return lambda x: tslibs.Timestamp(x, tz=self.dtype.tz)
2494-
24952471
def diff(self, n, axis=0):
24962472
"""1st discrete difference
24972473
@@ -2564,6 +2540,19 @@ def equals(self, other):
25642540
return False
25652541
return (self.values.view("i8") == other.values.view("i8")).all()
25662542

2543+
def quantile(self, qs, interpolation="linear", axis=0):
2544+
naive = self.values.view("M8[ns]")
2545+
2546+
# kludge for 2D block with 1D values
2547+
naive = naive.reshape(self.shape)
2548+
2549+
blk = self.make_block(naive)
2550+
res_blk = blk.quantile(qs, interpolation=interpolation, axis=axis)
2551+
2552+
# ravel is kludge for 2D block with 1D values, assumes column-like
2553+
aware = self._holder(res_blk.values.ravel(), dtype=self.dtype)
2554+
return self.make_block_same_class(aware, ndim=res_blk.ndim)
2555+
25672556

25682557
class TimeDeltaBlock(DatetimeLikeBlockMixin, IntBlock):
25692558
__slots__ = ()

0 commit comments

Comments
 (0)