微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

然而:

b = pd.DataFrame(a)

> b.ix[:3,0]

0   -1.916871
1   -0.639947
2   -0.100057
3    0.251988

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

解决方法:

这是记录的,它是Advanced Indexing的一部分.这里的关键是你根本就没有使用停止索引.

ix属性一个特殊的东西,它允许您通过标签选择标签列表,使用包含范围的标签而不是半独占范围的索引以及各种其他内容来执行各种高级索引.

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

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).这就是为什么我说问题是你根本没有使用停止索引.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐