为什么DataFrame除法运算返回ZeroDivisionError而非inf?
解决方案
你遇到的报错是因为当除数列是整数类型时,pandas整数除法遇0会直接触发ZeroDivisionError,而浮点型除法遇0默认返回inf,你可以选择以下任意一种方法解决:
- 方法1:将除数转换为浮点型后再做除法,除0时会自动返回
inf
# 写法1:直接转换除数类型 df['percent'] = df['value1'] / df['value2'].astype(float) # 写法2:用pandas内置div方法实现相同效果 df['percent'] = df['value1'].div(df['value2'].astype(float))
- 方法2:使用
numpy.where做条件判断,手动处理除数为0的场景,兼容性最强
import numpy as np # 除数为0时直接赋值inf,否则执行正常除法 df['percent'] = np.where(df['value2'] == 0, np.inf, df['value1'] / df['value2'])
- 方法3:临时修改numpy的浮点错误捕获规则,屏蔽除零报错
import numpy as np # 临时忽略除零错误,代码块执行结束后会自动恢复默认规则 with np.errstate(divide='ignore'): df['percent'] = df['value1'] / df['value2']
如果后续需要将结果中的inf替换为其他自定义值,可以补充对应处理代码:
# 示例:将正负inf替换为0,可按需修改目标值 df['percent'] = df['percent'].replace([np.inf, -np.inf], 0)
内容的提问来源于stack exchange,提问作者cm2115
相关产品推荐
相关产品推荐

