2017-08-07 48 views
1

,我有以下數據:在大熊貓的計算處理被零除

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 

我想在到達:

情況1:將數據設置爲特定值

0 0 
1 0 
2 0 

情況下2:將該值設置爲一個特定的系列

0 1 
1 2 
2 3 

回答

2

可以分割後使用df.replace

In [29]: (a/b).replace(np.inf, 0) 
Out[29]: 
0 0.0 
1 0.0 
2 0.0 
dtype: float64 

In [30]: (a/b).replace(np.inf, a) 
Out[30]: 
0 1.0 
1 2.0 
2 3.0 
dtype: float64 

要處理負無窮大嗎?你需要:

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

我想你可以ü SE 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功能檢查無窮大的值,然後substitue他們以0 EX-

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. ])