2012-12-03 79 views
10

我想在pandas系列上使用numpy.diff。我是對的,這是一個錯誤?還是我做錯了?熊貓系列上的numpy diff

In [163]: s = Series(np.arange(10)) 

In [164]: np.diff(s) 
Out[164]: 
0 NaN 
1  0 
2  0 
3  0 
4  0 
5  0 
6  0 
7  0 
8  0 
9 NaN 

In [165]: np.diff(np.arange(10)) 
Out[165]: array([1, 1, 1, 1, 1, 1, 1, 1, 1]) 

我使用熊貓0.9.1rc1,numpy的1.6.1。

回答

10

熊貓實現diff像這樣:

In [3]: s = pd.Series(np.arange(10)) 

In [4]: s.diff() 
Out[4]: 
0 NaN 
1  1 
2  1 
3  1 
4  1 
5  1 
6  1 
7  1 
8  1 
9  1 

使用np.diff直接:

In [7]: np.diff(s.values) 
Out[7]: array([1, 1, 1, 1, 1, 1, 1, 1, 1]) 

In [8]: np.diff(np.array(s)) 
Out[8]: array([1, 1, 1, 1, 1, 1, 1, 1, 1]) 

那麼,爲什麼不np.diff(s)工作?因爲np在找到diff之前正在採用該系列的np.asanyarray()。像這樣:

In [25]: a = np.asanyarray(s) 

In [26]: a 
Out[26]: 
0 0 
1 1 
2 2 
3 3 
4 4 
5 5 
6 6 
7 7 
8 8 
9 9 

In [27]: np.diff(a) 
Out[27]: 
0 NaN 
1  0 
2  0 
3  0 
4  0 
5  0 
6  0 
7  0 
8  0 
9 NaN