2012-12-03 6 views
10

パンダシリーズで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]) 

私はpandas 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はnp.asanyarray()を取得してからdiffを見つけます。そうですね:

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