From 4367fab9bd59e86e06911740717a1e77e3c6b755 Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Mon, 30 Mar 2020 18:22:23 -0700 Subject: [PATCH] REF: BlockManager.delete -> idelete --- pandas/core/generic.py | 3 ++- pandas/core/internals/managers.py | 15 ++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 62f5419c1f4c8..98ab3d74a3727 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -3712,7 +3712,8 @@ def __delitem__(self, key) -> None: # If the above loop ran and didn't delete anything because # there was no match, this call should raise the appropriate # exception: - self._data.delete(key) + loc = self.axes[-1].get_loc(key) + self._data.idelete(loc) # delete from the caches try: diff --git a/pandas/core/internals/managers.py b/pandas/core/internals/managers.py index 182a5b14a1242..73c4ff2d73ab9 100644 --- a/pandas/core/internals/managers.py +++ b/pandas/core/internals/managers.py @@ -1001,12 +1001,10 @@ def iget(self, i: int) -> "SingleBlockManager": self.axes[1], ) - def delete(self, item): + def idelete(self, indexer): """ - Delete selected item (items if non-unique) in-place. + Delete selected locations in-place (new block and array, same BlockManager) """ - indexer = self.items.get_loc(item) - is_deleted = np.zeros(self.shape[0], dtype=np.bool_) is_deleted[indexer] = True ref_loc_offset = -is_deleted.cumsum() @@ -1600,15 +1598,14 @@ def _consolidate_check(self): def _consolidate_inplace(self): pass - def delete(self, item): + def idelete(self, indexer): """ - Delete single item from SingleBlockManager. + Delete single location from SingleBlockManager. Ensures that self.blocks doesn't become empty. """ - loc = self.items.get_loc(item) - self._block.delete(loc) - self.axes[0] = self.axes[0].delete(loc) + self._block.delete(indexer) + self.axes[0] = self.axes[0].delete(indexer) def fast_xs(self, loc): """