From 9557eb9b61ddcebdaebb5c3fba9b892f4503abfa Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Tue, 2 Mar 2021 09:12:13 +0100 Subject: [PATCH 1/2] REF: remove internal Block usage from FrameColumnApply --- pandas/core/apply.py | 5 ++--- pandas/core/internals/managers.py | 9 +++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pandas/core/apply.py b/pandas/core/apply.py index 15cee1419afb5..a4e8668f71909 100644 --- a/pandas/core/apply.py +++ b/pandas/core/apply.py @@ -883,9 +883,8 @@ def series_generator(self): # of it. Kids: don't do this at home. ser = self.obj._ixs(0, axis=0) mgr = ser._mgr - blk = mgr.blocks[0] - if is_extension_array_dtype(blk.dtype): + if is_extension_array_dtype(ser.dtype): # values will be incorrect for this block # TODO(EA2D): special case would be unnecessary with 2D EAs obj = self.obj @@ -896,7 +895,7 @@ def series_generator(self): for (arr, name) in zip(values, self.index): # GH#35462 re-pin mgr in case setitem changed it ser._mgr = mgr - blk.values = arr + ser._mgr.set_values(arr) ser.name = name yield ser diff --git a/pandas/core/internals/managers.py b/pandas/core/internals/managers.py index e013a7f680d6f..4ceaf7cd3b6b5 100644 --- a/pandas/core/internals/managers.py +++ b/pandas/core/internals/managers.py @@ -1646,6 +1646,15 @@ def fast_xs(self, loc): """ raise NotImplementedError("Use series._values[loc] instead") + def set_values(self, values): + """ + Set the values of the single block in place. + + Use at your own risk! This does not check if the passed values are + valid for the current Block/SingleBlockManager (length, dtype, etc). + """ + self.blocks[0].values = values + # -------------------------------------------------------------------- # Constructor Helpers From f82737d6fd74f0f196a54a6f56844d3bb28caa12 Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Tue, 2 Mar 2021 17:09:59 +0100 Subject: [PATCH 2/2] update for comments --- pandas/core/apply.py | 2 +- pandas/core/internals/managers.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/core/apply.py b/pandas/core/apply.py index a4e8668f71909..203a0c675282d 100644 --- a/pandas/core/apply.py +++ b/pandas/core/apply.py @@ -895,7 +895,7 @@ def series_generator(self): for (arr, name) in zip(values, self.index): # GH#35462 re-pin mgr in case setitem changed it ser._mgr = mgr - ser._mgr.set_values(arr) + mgr.set_values(arr) ser.name = name yield ser diff --git a/pandas/core/internals/managers.py b/pandas/core/internals/managers.py index 4ceaf7cd3b6b5..2ad7471d6f086 100644 --- a/pandas/core/internals/managers.py +++ b/pandas/core/internals/managers.py @@ -1646,7 +1646,7 @@ def fast_xs(self, loc): """ raise NotImplementedError("Use series._values[loc] instead") - def set_values(self, values): + def set_values(self, values: ArrayLike): """ Set the values of the single block in place.