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

Pandas循环创建新列时如何正确处理ZeroDivisionError?

解决DataFrame批量生成比值新列的除零问题

要批量生成由现有列比值构成的新列,同时只让分母为0的行返回np.nan(而非整列赋值),可以用以下两种高效的向量化方法,避免整列try-except的问题:

方法一:用np.where显式判断分母

先定义好新列与分子、分母列的对应关系,再循环处理每个列对:

import pandas as pd
import numpy as np

# 示例DataFrame
df = pd.DataFrame({
    'a': [10, 20, 30, 40],
    'b': [2, 0, 5, 0],
    'c': [15, 25, 35, 45],
    'd': [3, 6, 0, 9]
})

# 定义新列-分子-分母的映射列表
column_mappings = [
    ('e', 'a', 'b'),
    ('f', 'c', 'd')
]

# 循环生成新列
for new_col, num_col, den_col in column_mappings:
    # 分母为0时赋值np.nan,否则计算比值
    df[new_col] = np.where(df[den_col] == 0, np.nan, df[num_col] / df[den_col])

方法二:用div方法结合替换无穷值

pandas的div方法计算除法时,分母为0会返回inf/-inf,直接把这些无穷值替换成np.nan即可:

for new_col, num_col, den_col in column_mappings:
    # 计算除法后替换无穷值为nan
    df[new_col] = df[num_col].div(df[den_col]).replace([np.inf, -np.inf], np.nan)

为什么之前的try-except会失效?

如果用整列赋值的try-except,只要列中存在一个分母为0的行,整个除法运算就会抛出ZeroDivisionError,触发except分支后整列被赋值为np.nan。而上面的向量化方法是逐行处理运算,只会对分母为0的行单独赋值np.nan,不影响其他正常行的计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:15:33