Python迁移代码时除零错误转NaN的环境差异排查
Pandas版本差异引发的除零行为不一致问题
问题现象
本地Python 3.9运行迁移代码时触发ZeroDivisionError,但原代码在Python 3.6环境中执行除零操作会自动生成NaN,无报错。
排查过程
- 最初推测是Python环境配置差异,对比版本特性后排除该可能;
- 进一步对比依赖版本,定位到Pandas版本不一致:原环境用Pandas 0.21.1,本地用Pandas 1.4.1。
根本原因
两个Pandas版本对DataFrame列类型的处理逻辑不同:
- Pandas 0.21.1中,目标列类型为
float64,对float类型执行除零操作时,遵循numpy浮点数运算规则,生成inf或NaN,不会触发Python原生除零异常; - Pandas 1.4.1中,目标列类型被推断为
object,对object类型数值执行除零运算时,调用Python原生数值运算逻辑,从而触发ZeroDivisionError。
解决方法
将object类型的列转换为float64类型后再执行运算,即可恢复旧版本的行为:
# 转换列类型 df['target_col'] = df['target_col'].astype('float64') # 执行除零操作,生成inf/NaN,无报错 result = df['target_col'] / 0
内容的提问来源于stack exchange,提问作者David Yang
相关产品推荐
相关产品推荐

