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

如何在Pandas中基于两列除法创建新列并避免除以0?

在Pandas中处理两列相除避免除以0的情况

这里有几种实用的方法实现你的需求:当price列为0时新列设为None(Pandas数值列中会自动转为NaN),否则计算memory/price:

方法1:用numpy.where直接判断赋值

这是最直观的方式,先判断条件再执行计算或赋值:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'id': [0,1,2,3,4],
    'memory': [7568,53759,41140,10558,44436],
    'price': [751.64,885.17,1067.78,0,1023.13]
})

# 创建新列
df['new'] = np.where(df['price'] == 0, None, df['memory'] / df['price'])

执行后df['new']的结果:

0     10.068650
1     60.732738
2     38.530144
3           NaN
4     43.431592
Name: new, dtype: float64

方法2:先计算再用loc修正

先执行除法运算,再定位price为0的行修改新列值:

df['new'] = df['memory'] / df['price']
df.loc[df['price'] == 0, 'new'] = None

这个方法适合已经执行了除法、需要修正结果的场景,和方法1效果完全一致。

方法3:直接替换inf值

如果已经得到了包含inf的结果,可以直接把无穷值替换为None:

df['new'] = df['memory'] / df['price']
df['new'] = df['new'].replace([np.inf, -np.inf], None)

注意事项

  • Pandas数值类型列无法存储原生None,会自动转为NaN(缺失值标记),这是符合Pandas数据规范的;若要强行保留None,可将列转为object类型,但会影响后续数值运算,不推荐。
  • 如果price列是浮点型的0(比如0.0),df['price'] == 0的条件判断依然有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:30:50