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

DataFrame列相除规避ZeroDivisionError时遭遇KeyError问题求助

问题解决:计算空中对抗胜率的KeyError与ZeroDivisionError处理

错误原因

你使用apply时未指定axis=1参数,默认会按列遍历(axis=0),此时lambda函数里的x是列级别的Series,其索引为行号,自然无法通过列名"Aerial duels"取值,因此抛出KeyError。

修复方案

方案1:修正apply的axis参数

将apply的axis设置为1,让它按行遍历,此时x代表每一行的Series,就能正确访问目标列名:

numerator_name = "Aerial duels won"
denominator_name = "Aerial duels"
ser_stat_values = df_competitions[[numerator_name, denominator_name]].apply(
    lambda x: x[numerator_name] / x[denominator_name] if x[denominator_name] != 0 else 0,
    axis=1
)
print(ser_stat_values)

方案2:用Pandas原生方法更高效

避免使用apply(性能弱于原生矢量化操作),直接用div方法结合replace处理除零情况:

numerator = df_competitions["Aerial duels won"]
denominator = df_competitions["Aerial duels"]
ser_stat_values = numerator.div(denominator).replace([float('inf'), float('-inf')], 0).fillna(0)
  • div自动执行元素级除法,除零会生成inf
  • replace将无穷值替换为0
  • fillna处理分母为NaN的情况(若存在)

额外说明

你直接相除时出现ZeroDivisionError,可能是因为Pandas配置中开启了mode.use_inf_as_na或相关严格模式,导致除零直接报错而非生成inf。可通过以下命令查看或修改配置:

import pandas as pd
print(pd.get_option('mode.use_inf_as_na'))  # 查看当前配置
pd.set_option('mode.use_inf_as_na', False)   # 关闭后除零会生成inf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:57:22