开始:停止切换numpy和Pandas之间的不一致?

Ame*_*ina 5 python numpy pandas

我对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]])
Run Code Online (Sandbox Code Playgroud)

然而:

b = pd.DataFrame(a)

> b.ix[:3,0]

0   -1.916871
1   -0.639947
2   -0.100057
3    0.251988
Run Code Online (Sandbox Code Playgroud)

换句话说,numpy不包括符号中的stop索引start:stop,但是Pandas会这样做.我以为熊猫是以Numpy为基础的.这是一个错误吗?故意的?

aba*_*ert 3

有记录的,它是高级索引的一部分的一部分。这里的关键是您根本没有使用停止索引。

\n\n

该属性是一个特殊的东西,可以让您按标签ix进行各种高级索引\xe2\x80\x94 选择标签列表、使用包含范围的标签而不是半排他范围的索引以及各种其他内容来执行各种高级索引。

\n\n

如果你不想这样,就不要使用它:

\n\n
In [191]: b[:3][0]\nOut[191]: \n0   -0.209386\n1    0.050345\n2    0.318414\nName: 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您在不阅读文档的情况下多玩一点,您可能会想出一种情况,其中您的标签是,\'A\', \'B\', \'C\', \'D\'而不是0, 1, 2, 3,然后突然,b.ix[:3]将仅返回 3 行而不是 4 行,并且您将再次困惑。

\n\n

不同之处在于,在这种情况下,是索引b.ix[:3]上的切片,而不是标签上的切片上的切片。

\n\n

您在代码中请求的内容实际上在“所有标签最多包括 3”和“所有索引最多但不包括 3”之间是不明确的,并且标签总是获胜ix(因为如果您不希望标签切片,你不必使用ix首先使用)。这就是为什么我说问题是你根本没有使用停止索引。

\n