pandas 1.5+ 开始密集清理 api,fillna() 自动降级 dtype、append() 方法、str.contains() 默认 regex=true、excelwriter.save() 均被弃用或变更,需显式改用 infer_objects()/concat()/regex=false/close() 等替代方案。

因为 pandas 1.x 系列(尤其是 1.5+)开始密集推进 API 清理和行为收敛,很多过去“容忍但不推荐”的写法被标记为 FutureWarning,不是 bug,而是明确告诉你:这段代码在 2.0+ 或后续小版本里会失效、报错或语义变更。
fillna() 自动 downcasting 被弃用
你写 df.fillna(0) 时,如果某列原是 float64 但含 NaN,pandas 曾自动把它填完后转成 int64(只要没小数)。这个“悄悄降级类型”的行为现在被警告:
- 它破坏了 dtype 一致性,容易引发下游计算错误(比如
int64 + float32溢出) - 未来版本会默认禁用该行为,
fillna()返回的列将保持原始 dtype - 正确做法是显式调用
.infer_objects(copy=False),或提前设pd.set_option('future.no_silent_downcasting', True)
append() 方法已移除,concat 是唯一正途
df1.append(df2) 在 pandas ≥1.4 中就触发警告,2.0+ 直接 AttributeError。原因很实在:
华为云 Python SDK 查询工具。自动发现已安装 SDK 的服务包、Client类、API 方法、入参详情、类信息(__init__ 参数、属性、类型、描述),支持关键字搜索,快速定位目标 API 使用方法。
-
append是concat的薄封装,功能冗余且参数不一致(比如ignore_index默认值不同) -
concat支持更多模式(如axis=1、keys分组、join策略),统一维护成本更低 - 必须改写为
pd.concat([df1, df2], ignore_index=True),否则升级后直接崩
regex 默认值从 True 变为 False
str.contains('x') 过去默认当正则用;现在警告你:将来它只做字面匹配,除非你写 regex=True。
- 不加
regex参数的代码,可能意外匹配到.*?等字符,造成逻辑错误 - 性能差异大:正则引擎比字符串扫描慢一个数量级,尤其对大数据
- 必须显式写成
str.contains('x', regex=False)(字面)或str.contains(r'\d+', regex=True)(正则)
ExcelWriter.save() 已被 close() 替代
writer.save() 在 pandas ≥1.4 中警告,2.0+ 删除。本质是资源管理模型变更:
-
save()是旧式手动 flush,易遗漏或重复调用 -
close()符合 Python 的上下文管理规范(with pd.ExcelWriter(...) as w:自动 close) - 漏掉
close()会导致 Excel 文件损坏或写入不全——这点比警告本身更危险
这些警告不是“提醒你优化”,而是“给你留出迁移窗口”。真正麻烦的不是警告本身,是那些没加 regex、没换 concat、还在链式调用 inplace=True 的代码——它们会在某次 pip upgrade 后突然失效,且错误信息往往不指向原始问题行。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










