如何在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
相关产品推荐
相关产品推荐

