在Pandas计算中处理除以零的情况

9

我有以下数据:

a = pd.Series([1, 2, 3])
b = pd.Series([0, 0, 0])

如果除数为零,我希望在某些情况下执行以下操作之一:

  1. 将结果设置为系列中的一个
  2. 将结果设置为特定值

但是以下操作会产生“意外”的结果:

a.div(b, fill_value = 0)
0    inf
1    inf
2    inf

a.div(b).fillna(0)
0    inf
1    inf
2    inf

a.div(b).combine_first(a)
0    inf
1    inf
2    inf

我希望能够实现以下目标: 情况一: 将数据设定为特定值。
0    0
1    0
2    0

案例2: 将值设置为特定系列

0    1
1    2
2    3
3个回答

18

在分割之后,您可以使用df.replace

(a / b).replace(np.inf, 0)

0    0.0
1    0.0
2    0.0
dtype: float64

(a / b).replace(np.inf, a)

0    1.0
1    2.0
2    3.0
dtype: float64

想要处理负无穷大吗?你需要:

(a / b).replace((np.inf, -np.inf), (a, a))

4

我认为你可以使用Series.replace

print (a.div(b.replace(0, np.nan)).fillna(0))
0    0.0
1    0.0
2    0.0
dtype: float64

print (a.div(b.replace(0, np.nan)).fillna(a))
0    1.0
1    2.0
2    3.0
dtype: float64

1
你也可以使用np.isinf函数来检查无限值,然后用0替换它们。例如-
a = np.asarray(np.arange(5))
b = np.asarray([1,2,0,1,0])

c = a/b
c[np.isinf(c)] = 0

#result
>>> c
array([ 0. ,  0.5,  0. ,  3. ,  0. ])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接