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

如何在Pandas中实现两列除法,除数为0时赋值0?

解决Pandas中新增除法列并处理除数为0的问题

你遇到的ValueError是因为直接用if df[df['pupils']!=0]判断整个DataFrame的布尔值,Pandas无法确定这种情况下的真值(返回的是布尔索引的DataFrame而非单个布尔值)。下面是几种可行的解决方法:

方法1:使用numpy.where向量化处理

这是最直观的向量化实现,逐行判断并赋值:

import numpy as np
import pandas as pd

# 构造测试数据
df = pd.DataFrame({'apples': [5, 6, 5], 'pupils': [2, 3, 0]})

# 新增目标列
df['avg_apples_per_pupils'] = np.where(df['pupils'] != 0, df['apples'] / df['pupils'], 0.0)

方法2:使用Pandasdiv方法结合值替换

利用除法方法div处理,再替换除0产生的无穷值和空值:

df['avg_apples_per_pupils'] = df['apples'].div(df['pupils']).replace([np.inf, -np.inf], 0.0).fillna(0.0)

解释:div执行除法时,除数为0会生成inf,通过replace将正负无穷值替换为0,fillna处理被除数也为0时产生的NaN。

方法3:使用loc索引分步赋值

先给整列设默认值,再对符合条件的行计算赋值:

# 先初始化整列为0
df['avg_apples_per_pupils'] = 0.0
# 对pupils不为0的行计算除法结果
df.loc[df['pupils'] != 0, 'avg_apples_per_pupils'] = df['apples'] / df['pupils']

以上三种方法都能得到预期结果:

applespupilsavg_apples_per_pupils
522.5
632.0
500.0

内容的提问来源于stack exchange,提问作者Beginner in the house

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:57:19