pandas 系列的numpy差异 [英] numpy diff on a pandas Series

查看:81
本文介绍了 pandas 系列的numpy差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在pandas系列上使用numpy.diff.我是对的,这是错误吗?还是我做错了?

I want to use numpy.diff on a pandas Series. Am I right that this is a bug? Or am I doing it wrong?

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.

I am using pandas 0.9.1rc1, numpy 1.6.1.

推荐答案

Pandas像这样实现diff:

Pandas implements diff like 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

直接使用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().像这样:

So why doesn't np.diff(s) work? Because np is taking np.asanyarray() of the series before finding the diff. Like so:

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

这篇关于 pandas 系列的numpy差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆