在 Pandas 计算中处理除以零

Handling division by zero in Pandas calculations

我有以下数据:

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

如果有除以零我想在某些情况下

  1. 将结果设置为系列之一
  2. 将结果设置为特定值

但以下给出 "unexpected" 结果:

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

我想到达:

案例1:设置数据为特定值

0    0
1    0
2    0

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

0    1
1    2
2    3

我想你可以使用 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

除法后可以用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))

您还可以使用 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. ])