开始:停止切割numpy和Pandas之间的不一致?
我有点惊讶/困惑numpy的和熊猫之间存在下列区别开始:停止切割numpy和Pandas之间的不一致?
import numpy as np
import pandas as pd
a = np.random.randn(10,10)
> a[:3,0, newaxis]
array([[-1.91687144],
[-0.6399471 ],
[-0.10005721]])
但是:
b = pd.DataFrame(a)
> b.ix[:3,0]
0 -1.916871
1 -0.639947
2 -0.100057
3 0.251988
换句话说,numpy的不包括stop
指数start:stop
符号,但熊猫确实。我认为熊猫是基于Numpy的。这是一个错误?故意的?
这是记录,而且这也是Advanced Indexing一部分。这里的关键是你根本没有使用停止索引。
的ix
属性,可以让你通过标签 -choosing标签列表做各种先进的索引,使用标签,而不是指数的半独家范围所包括的范围一件特殊的事情,以及其他各种的东西。
如果你不希望出现这种情况,只是不使用它:
In [191]: b[:3][0]
Out[191]:
0 -0.209386
1 0.050345
2 0.318414
Name: 0
如果你玩这个多一点没有阅读的文档,你可能会拿出一个情况下你标签是,例如'A', 'B', 'C', 'D'
而不是0, 1, 2, 3
,突然,b.ix[:3]
将只返回3行而不是4,并且您将再次被困惑。
不同的是,在这种情况下,b.ix[:3]
是指数,而不是标签片。
您在代码中所要求的内容实际上在“包含3的所有标签”和“所有索引达到但不包括3”之间都是不明确的,标签总是以ix
赢得(因为如果您不想要标签切片,你不必首先使用ix
)。这就是为什么我说问题是你根本没有使用停止索引。
在你的例子中,它会返回一个副本。您需要使用.loc或.iloc分配权限? – 2017-02-15 22:36:46
从(docs):
切片具有标准Python语义整片
...
切片用标签是语义上略有不同,因为 片的开始和结束包容性在基于标签的情况下。
没错,但是你如何才能使基于标签的切片在一端独占鳌头(就像普通的蟒蛇切片一样!) – 2016-07-28 06:37:32
当索引类型为整数时,DataFrame.ix
将仅使用基于标签的索引。根据该文件,基于标签的切片将包括启动和停止。
http://pandas.pydata.org/pandas-docs/dev/indexing.html#advanced-indexing-with-labels
切片用标签是语义上略有不同,因为 分片开始和结束都包括在基于标签的情况。
带整数轴标签的基于标签的索引是一个棘手的话题。它已经在科学Python社区的邮件列表和各种成员 中进行了大量讨论。在熊猫中,我们的一般观点 是标签比整数位置更重要。因此,对于 整数轴索引,只有基于标签的索引可以使用 标准工具(如.ix)。以下代码会产生例外
为什么你使用'b.ix'而不是'b [:3]'? – abarnert 2013-02-28 01:45:34