From efed9ad73e26db8dd7708736b0be3828df746267 Mon Sep 17 00:00:00 2001 From: Thomas Li <47963215+lithomas1@users.noreply.github.com> Date: Sun, 3 Dec 2023 13:28:58 -0500 Subject: [PATCH 1/3] REGR: Fix reading old pickles from pandas 1.3.5 --- doc/source/whatsnew/v2.1.4.rst | 2 +- pandas/core/internals/blocks.py | 5 +++++ .../1.3.5/1.3.5_x86_64_darwin_3.10.13.pickle | Bin 0 -> 126796 bytes .../tests/io/generate_legacy_storage_files.py | 9 ++++++++- 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 pandas/tests/io/data/legacy_pickle/1.3.5/1.3.5_x86_64_darwin_3.10.13.pickle diff --git a/doc/source/whatsnew/v2.1.4.rst b/doc/source/whatsnew/v2.1.4.rst index 77ce303dc1bfe..4e62138e7cca7 100644 --- a/doc/source/whatsnew/v2.1.4.rst +++ b/doc/source/whatsnew/v2.1.4.rst @@ -13,7 +13,7 @@ including other versions of pandas. Fixed regressions ~~~~~~~~~~~~~~~~~ -- +- Fixed regression when trying to read a pickled pandas :class:`DataFrame` from pandas 1.3 (:issue:`55137`) - .. --------------------------------------------------------------------------- diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index 535d18f99f0ef..10271596a2d6b 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -2557,6 +2557,11 @@ def new_block( # - check_ndim/ensure_block_shape already checked # - maybe_coerce_values already called/unnecessary klass = get_block_type(values.dtype) + + # Old pandas (<=1.3.0) will call this function with placements + # that aren't necessarily BlockPlacements when unpickling + if not isinstance(placement, BlockPlacement): + placement = BlockPlacement(placement) return klass(values, ndim=ndim, placement=placement, refs=refs) diff --git a/pandas/tests/io/data/legacy_pickle/1.3.5/1.3.5_x86_64_darwin_3.10.13.pickle b/pandas/tests/io/data/legacy_pickle/1.3.5/1.3.5_x86_64_darwin_3.10.13.pickle new file mode 100644 index 0000000000000000000000000000000000000000..47152e776b8c74eeb07eea4ac5e9d0fe7eb251a0 GIT binary patch literal 126796 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 URsHh~N{%6ayZ<*jF){o90KVi4rT_o{ literal 0 HcmV?d00001 diff --git a/pandas/tests/io/generate_legacy_storage_files.py b/pandas/tests/io/generate_legacy_storage_files.py index 5550daebac0b2..9bfd8eb9d51d5 100644 --- a/pandas/tests/io/generate_legacy_storage_files.py +++ b/pandas/tests/io/generate_legacy_storage_files.py @@ -38,6 +38,10 @@ import platform as pl import sys +# Remove script directory from path, otherwise Python will try to +# import the JSON test directory as the json module +sys.path.pop(0) + import numpy as np import pandas @@ -314,7 +318,7 @@ def write_legacy_pickles(output_dir): def write_legacy_file(): # force our cwd to be the first searched - sys.path.insert(0, ".") + sys.path.insert(0, "") if not 3 <= len(sys.argv) <= 4: sys.exit( @@ -325,6 +329,9 @@ def write_legacy_file(): output_dir = str(sys.argv[1]) storage_type = str(sys.argv[2]) + if not os.path.exists(output_dir): + os.mkdir(output_dir) + if storage_type == "pickle": write_legacy_pickles(output_dir=output_dir) else: From 1b2f1c3e6885706b4641bca3fc3f1d6cb4cfff96 Mon Sep 17 00:00:00 2001 From: Thomas Li <47963215+lithomas1@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:03:44 -0500 Subject: [PATCH 2/3] Use pickle compat --- pandas/compat/pickle_compat.py | 6 ++++++ pandas/core/internals/blocks.py | 4 ---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pandas/compat/pickle_compat.py b/pandas/compat/pickle_compat.py index 4f067d958b799..cd98087c06c18 100644 --- a/pandas/compat/pickle_compat.py +++ b/pandas/compat/pickle_compat.py @@ -65,6 +65,12 @@ def load_reduce(self) -> None: ("pandas.core.sparse.array", "SparseArray"): ("pandas.core.arrays", "SparseArray"), # 15477 ("pandas.core.base", "FrozenNDArray"): ("numpy", "ndarray"), + # Re-routing unpickle block logic to go through _unpickle_block instead + # for pandas <= 1.3.5 + ("pandas.core.internals.blocks", "new_block"): ( + "pandas._libs.internals", + "_unpickle_block", + ), ("pandas.core.indexes.frozen", "FrozenNDArray"): ("numpy", "ndarray"), ("pandas.core.base", "FrozenList"): ("pandas.core.indexes.frozen", "FrozenList"), # 10890 diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index 1a05dc1258266..e5f7272ea5c39 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -2612,10 +2612,6 @@ def new_block( # - maybe_coerce_values already called/unnecessary klass = get_block_type(values.dtype) - # Old pandas (<=1.3.0) will call this function with placements - # that aren't necessarily BlockPlacements when unpickling - if not isinstance(placement, BlockPlacement): - placement = BlockPlacement(placement) return klass(values, ndim=ndim, placement=placement, refs=refs) From 6666d0bd44b4700f86fa919d12a2974efac7be99 Mon Sep 17 00:00:00 2001 From: Thomas Li <47963215+lithomas1@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:04:22 -0500 Subject: [PATCH 3/3] extraneous space --- pandas/core/internals/blocks.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index e5f7272ea5c39..a06d266870edc 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -2611,7 +2611,6 @@ def new_block( # - check_ndim/ensure_block_shape already checked # - maybe_coerce_values already called/unnecessary klass = get_block_type(values.dtype) - return klass(values, ndim=ndim, placement=placement, refs=refs)