【问题标题】:How to get rid of Divide by Zero error in python pandas?如何摆脱 python pandas 中的除以零错误?
【发布时间】:2019-07-26 15:40:58
【问题描述】:

我有一个包含两列的数据框:

df

有一些科学价值,例如0E-10,我想创建一个新列:

df["new_col"]=df["fruits_ratio"]/(df["fruits_ratio"]+df["vegetables_ratio"])

但它给了我这样的错误: DivisionByZero: [<class 'decimal.DivisionByZero'>]

有没有办法替换 0-E10 值或如何避免错误?

谢谢

【问题讨论】:

标签: python pandas dataframe divide-by-zero


【解决方案1】:

我认为 float 函数会为您解决这个问题float()。将整个列分配为浮点数,因为大多数已经是。

【讨论】:

  • 浮点数将处理除以零?
  • 是的,好吧.. 在 Pandas 系列或数据框沿轴划分的上下文中除以零时,浮点数将产生 float('inf')
【解决方案2】:

给定:

df = pd.DataFrame({'a':[0,1,2,3,0,1,2,3], 'b':[0,1,0,1,1,0,1,0]})

作为

   a  b
0  0  0
1  1  1
2  2  0
3  3  1
4  0  1
5  1  0
6  2  1
7  3  0

创建一个掩码以识别ab 不为零的位置,可以安全计算。

mask = (df['a'] != 0) | (df['b'] != 0)

面具

0    False
1     True
2     True
3     True
4     True
5     True
6     True
7     True

NaN 填充结果列,然后覆盖您可以计算的结果:

df['c'] = pd.np.NaN
df.loc[mask, 'c'] = df['a'] / (df['a'] + df['b'])

结果

   a  b         c
0  0  0       NaN
1  1  1  0.500000
2  2  0  1.000000
3  3  1  0.750000
4  0  1  0.000000
5  1  0  1.000000
6  2  1  0.666667
7  3  0  1.000000

适用于您的问题:

mask = (df['fruits_ratio'] != 0) | (df['vegetables_ratio'] != 0)
df['new_col'] = pd.np.NaN
df.loc[mask, 'new_col'] = df['fruits_ratio'] / (df['fruits_ratio'] + df['vegetables_ratio'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2022-10-31
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    相关资源
    最近更新 更多