2012-12-03 11 views
10

Ich möchte numpy.diff auf einer Pandas-Serie verwenden. Habe ich Recht, dass dies ein Fehler ist? Oder mache ich es falsch?numpy diff auf einer Pandas-Serie

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

Ich benutze pandas 0.9.1rc1, numpy 1.6.1.

Antwort

10

Pandas implementiert diff wie so:

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 

Mit np.diff direkt:

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

Warum also nicht np.diff(s) Arbeit? Weil np np.asanyarray() der Reihe vor dem Finden der diff nimmt. So ähnlich:

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