ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

pandas 1.3.4 版本更新详解:回归修复、Bug 修复与升级指南

pandas 1.3.4 版本更新详解:回归修复、Bug 修复与升级指南 pandas 1.3.4 版本更新详解回归修复、Bug 修复与升级指南【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandaspandas 1.3.4 是 pandas 1.3.x 系列的一个补丁版本于 2021 年 10 月 17 日发布。该版本聚焦于修复 1.3.x 系列引入的一系列回归问题regressions以及少量长期存在的 Bug并提升了编译工具链的最低版本要求没有新增任何 API 或弃用项。读完本文你将系统掌握 1.3.4 修复的每一处问题及对应场景包括convert_dtypes、merge、groupby、rolling、corr、Categorical 系列方法等了解各修复的底层实现原理并明确升级到该版本时应注意的编译环境变化。完整变更记录见仓库中的 版本发布说明本文对应条目源文件为 v1.3.4.rst。版本概况与发布背景pandas 1.3.4 是 1.3.x 分支的第四个补丁版本紧跟在 1.3.3 之后发布。按照 pandas 的版本策略补丁版本patch release只包含 Bug 修复与回归修复不引入新特性、不改变既有 API 行为、不新增弃用警告因此对生产环境非常友好可以放心升级。本版本的修复按类别划分如下回归修复Fixed regressions11 项针对 1.3.x 新引入的行为退化Bug 修复Bug fixes4 项针对长期存在的缺陷其他变更Other1 项提升 Cython 最低编译版本。回归修复1.3.x 系列引入的行为退化回归是指新版本在某次重构或优化过程中意外改变了既有功能的正确行为。1.3.4 重点清理了 1.3.x 系列累积的回归问题共 11 项。DataFrame.convert_dtypes 误转换字节串DataFrame.convert_dtypes负责将各列从 numpy dtype 转换为最合适的、支持pd.NA的 dtype如 nullable 整数、字符串、布尔扩展类型其实现定义于 pandas/core/generic.py。1.3.4 修复了该方法的回归此前它会把byte string字节串错误地转换为字符串类型对应 issue 43183。字节串如babc与字符串abc在 pandas 中语义不同前者应保持为object或 bytes 类型。该回归会让用户在对包含二进制数据的 DataFrame 调用convert_dtypes后意外丢失 bytes 语义进而影响后续的 IO 或二进制处理逻辑。升级验证升级后对含bytes列的 DataFrame 调用df.convert_dtypes()字节串列不应再被改写成普通字符串列。DataFrameGroupBy.agg 沿 axis1 且列名为 MultiIndex 时静默失败DataFrameGroupBy.agg与SeriesGroupBy.agg在使用混合数据类型、沿axis1聚合且分组列为MultiIndex时会静默地失败不抛错但结果错误对应 issue 43209。1.3.4 修复了该回归确保在此类复杂分组结构下聚合结果正确、且失败时能正常报错而不是悄悄吞掉。merge 在整数与 NaN 键的外连接outer中出错merge使用整数键与NaN键执行howouter全外连接时出现回归对应 issue 43550。merge的how参数支持{left, right, outer, inner, cross, left_anti, right_anti}定义于 pandas/core/reshape/merge.py。当连接键列中同时存在整数和缺失值NaN时外连接需要将无法匹配的键保留为缺失值此前实现会出现错误结果或抛异常本版本修复了该组合场景。DataFrame.corr 在 32 位平台上的 Spearman 回归DataFrame.corr(methodspearman)在32 位平台上会抛出ValueError对应 issue 43588。相关系数计算的主路径在 pandas/core/frame.py 中spearman方法最终调用libalgos.nancorr_spearman(mat, minpmin_periods)其 Cython 实现位于 pandas/_libs/algos.pyx。该实现先在无 GIL 的循环中对每一列调用rank_1d求秩再计算秩相关系数回归源于 32 位平台上与int/Py_ssize_t宽度相关的数值或索引处理差异1.3.4 针对该平台修复了问题。提示corr的method支持{pearson, kendall, spearman}或可调用对象其中 kendall/spearman 均走 Cython 加速路径。MultiIndex.equals 的性能回归MultiIndex.equals出现性能回归对应 issue 43549即相等性判断的耗时相较早期版本明显变慢。性能类回归通常源于数据结构或比较算法的调整1.3.4 恢复了其应有的比较速度。groupby.first / last 在 StringDtype 下的性能回归.DataFrameGroupBy.first、.SeriesGroupBy.first、.DataFrameGroupBy.last、.SeriesGroupBy.last在使用StringDtypepandas 原生的字符串扩展类型时出现性能回归对应 issue 41596。字符串扩展类型由于底层采用对象数组或 PyArrow 后端groupby 的 first/last 归约路径需要额外处理缺失值与内存布局本版本修复了该路径的性能退化。Series.cat.reorder_categories 与 categories setter 的回归Series.cat.reorder_categories以及Series.cat.categories的setter 赋值均出现回归更新类别后未能同步反映到Series上分别对应 issue 43232 与 issue 43334。其底层实现位于 pandas/core/arrays/categorical.py 的reorder_categories该方法要求new_categories必须包含全部旧类别且不引入新类别否则抛出ValueError核心的原地更新逻辑由_set_categoriespandas/core/arrays/categorical.py完成它校验新类别数量与旧类别一致并通过CategoricalDtype._from_fastpath/CategoricalDtype重建 dtype 后以super().__init__(self._ndarray, new_dtype)重新绑定底层数据。1.3.4 修复了该路径在Series访问器上未正确触发更新的回归。升级验证升级后执行s.cat.reorder_categories([...], orderedTrue)或直接对s.cat.categories赋值s.cat.categories应立即反映新类别顺序。read_csv 在 memory_mapTrue 时抛出 UnicodeDecodeErrorread_csv(..., memory_mapTrue)在特定文件上抛出UnicodeDecodeError对应 issue 43540。memory_mapTrue会让 pandas 使用内存映射方式读取文件而非一次性加载到内存该回归破坏了这一模式下的解码流程本版本修复后内存映射读取不再异常。DataFrame.explode 对非字符串标量 column 抛出 AssertionErrorDataFrame.explode(column...)在column为任何非字符串的标量如整数 0时会抛出AssertionError对应 issue 43314。explode接受列名或列名列表标量列名如整数位置标识是合法用法本版本修复了该断言误触发的问题。Series.aggregate 重复传递 args/kwargsSeries.aggregate在特定情况下会把args与kwargs多次传递给用户提供的func对应 issue 43357。聚合函数在内部可能对同一函数执行多次调用例如同时有 named aggregation 或多次应用本版本修复了参数被重复注入的问题。与之相关的一个 Bug 修复见下文是Series.aggregate在另一些情况下完全没有传递第一个args两个修复共同保证args/kwargs恰好被完整传递一次。groupby.rolling 在输入分组未排序时的回归两组回归都与未排序分组相关对应同一个 issue 43386迭代DataFrame.groupby(...).rolling(...)对象时若输入分组未排序得到的每个 DataFrame 片段索引不正确DataFrame.groupby.rolling.cov()与DataFrame.groupby.rolling.corr()在输入分组未排序时计算结果错误。分组滚动窗口需要先对每个组独立排序再按窗口端点取值未排序输入会破坏窗口端点与组边界的对应关系1.3.4 确保排序与分组端点处理一致。Bug 修复长期存在的缺陷除回归修复外1.3.4 还修复了 4 项长期存在的 Bug。groupby.rolling 与 FixedForwardWindowIndexer 的段错误与窗口端点混组pandas.DataFrame.groupby.rolling与pandas.api.indexers.FixedForwardWindowIndexer组合使用时会导致segfault段错误且窗口端点在不同分组之间被混用对应 issue 43267。FixedForwardWindowIndexer是前向固定窗口索引器用于扩展窗口/前向窗口场景当其与 groupby 结合时Cython 层的窗口端点索引越界导致崩溃。这是本版本最严重的安全性问题之一——段错误意味着进程直接崩溃而非抛出 Python 异常升级 1.3.4 可彻底规避该风险。DataFrameGroupBy.mean / SeriesGroupBy.mean 对含 NaT 的 datetimelike 值计算错误.DataFrameGroupBy.mean与.SeriesGroupBy.mean在聚合包含NaT值的 datetimelike日期时间类数据时返回错误结果对应 issue 43132。日期时间均值归约需要正确处理NaT缺失时间戳1.3.4 修复后含缺失时间戳的分组均值不再被污染。Series.aggregate 未传递第一个 argsSeries.aggregate在特定情况下未将第一个args传递给用户提供的func对应 issue 43357与前述回归修复同源。例如用户调用s.aggregate(f, 10)时10可能被吞掉本版本确保所有位置参数都被完整传递。Series.rolling.quantile / median 的内存泄漏Series.rolling.quantile与Series.rolling.median存在内存泄漏对应 issue 43339。滚动窗口计算在 Cython 层反复分配中间缓冲1.3.4 修复了这些缓冲未正确释放的问题长时间高频调用滚动分位数/中位数的场景如实时监控、量化回测内存占用将不再持续增长。其他变更Cython 最低版本提升1.3.4 将编译 pandas 所需的最低 Cython 版本提升到0.29.24对应 issue 43729。这一变更影响的是从源码构建 pandas 的用户例如通过pip install pandas --no-binary pandas或从本仓库源码自行编译而非使用预编译 wheel 的普通用户。0.29.24修复了 Cython 编译器本身的若干问题配合本版本 Cython 层如 pandas/_libs/algos.pyx、pandas/_libs/window 等的修复共同保证构建产物的稳定性。升级指南与验证建议升级方式1.3.4 属于补丁版本升级路径平滑# 使用预编译 wheel 的常规升级 pip install --upgrade pandas1.3.4 # 源码编译用户需确保 Cython 0.29.24 pip install Cython0.29.24 pip install pandas1.3.4 --no-binary pandas注意本版本为 2021 年发布的 1.3.x 系列补丁若你当前使用更新的 pandas 版本如 2.x对应修复早已并入主线上述命令仅对仍停留在 1.3.x 的旧项目适用。重点回归验证清单升级后建议重点验证以下曾经出问题的路径确认修复生效修复项验证要点convert_dtypes含bytes列的 DataFrame 转换后字节串列保持不变merge(howouter)整数键与NaN键混合的连接键列结果正确保留缺失值corr(methodspearman)32 位平台上不再抛ValueErrorcat.reorder_categories/cat.categories赋值类别更新即时反映到Seriesread_csv(memory_mapTrue)不再抛UnicodeDecodeErrorexplode非字符串标量column不再触发AssertionErroraggregate用户func恰好收到一次args/kwargs且第一个args不被吞掉groupby.rolling.cov/corr未排序分组输入下结果与排序后一致groupby.rollingFixedForwardWindowIndexer不再出现段错误窗口端点不跨组混用groupby.meandatetimelike含NaT的分组均值正确rolling.quantile/rolling.median长时间调用内存占用稳定小结pandas 1.3.4 是一个典型的质量修复版本11 项回归修复 4 项 Bug 修复 1 项编译链变更。其中groupby.rolling与FixedForwardWindowIndexer组合导致的段错误修复最为关键而aggregate的参数传递、Categorical 类别更新、convert_dtypes字节串处理等回归修复则直接影响日常数据清洗与分析的正确性。对于仍运行在 1.3.x 分支的生产环境强烈建议升级至本版本以获得这些稳定性保障。【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表