You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas 1.2.4升级至1.3.2代码不兼容问题及破坏性变更咨询

问题1解答

(a) 对应破坏性变更

pandas 1.3.0 版本对 where()/mask() 方法做了类型保留的破坏性调整:方法执行过程中会严格保留原始数组的数据类型,不再自动向上转型为 object 类型。
1.2.4版本中,你传入None替换NaN时,pandas会自动将原float类型的列转为object类型存储None;1.3.2版本中,因为原始列是带NaN的float类型,None会被自动转换回NaN,导致替换逻辑失效。

(b) 新写法适用性

df = df.replace({np.nan: None})完全适合NaN转None的场景:

  • 该写法的逻辑是直接做值映射替换,不受原列数据类型限制,遇到NaN就替换为None
  • 兼容1.2.x和1.3.x全版本
  • 唯一需要注意的是替换后原本的数值列会转为object dtype,这是因为None只能存储在object类型列中,属于预期行为,适配后续逻辑即可。

问题2解答

对应pandas 1.3.0版本中合并操作的类型推断逻辑破坏性变更:concat、merge等数据拼接操作的列类型推断规则调整,优先推断为数值类型而非object类型。
旧版本中,同时包含None和布尔值的列拼接时会被推断为object类型,布尔值可以保留原类型;1.3版本后会优先尝试数值类型推断,布尔值会被强制转为浮点数(True转1.0、False转0.0),None会被转为NaN,就出现了你遇到的布尔值变为1.0的问题。


内容的提问来源于stack exchange,提问作者RML

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:27:03