在 Pandas 计算中处理除以零
Handling division by zero in Pandas calculations
我有以下数据:
a = pd.Series([1, 2, 3])
b = pd.Series([0, 0, 0])
如果有除以零我想在某些情况下
- 将结果设置为系列之一
- 将结果设置为特定值
但以下给出 "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. ])
我有以下数据:
a = pd.Series([1, 2, 3])
b = pd.Series([0, 0, 0])
如果有除以零我想在某些情况下
- 将结果设置为系列之一
- 将结果设置为特定值
但以下给出 "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. ])