5

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が、Pandasには含まれています。パンダはNumpyをベースにしていると思いました。これはバグですか?意図的ですか?

4

3 に答える 3

3

これ文書化されており、AdvancedIndexingの一部です。ここで重要なのは、ストップインデックスをまったく使用していないということです。

この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]4行ではなく3行しか返されない場合があり、困惑するでしょう。もう一度。

違いは、その場合、はラベルではなくインデックスb.ix[:3]のスライスであるということです。

コードで要求した内容は、実際には「3を含むまでのすべてのラベル」と「3を含まないまでのすべてのインデックス」の間であいまいであり、ラベルは常に勝ちixます(ラベルのスライスが必要ない場合は、そもそも使用する必要はありませんix)。そのため、問題はストップインデックスをまったく使用していないことだと言いました。

于 2013-02-28T01:48:01.297 に答える
2

インデックスタイプが整数の場合、DataFrame.ixラベルベースのインデックスのみを使用します。ドキュメントによると、ラベルベースのスライスには開始と停止が含まれます。

http://pandas.pydata.org/pandas-docs/dev/indexing.html#advanced-indexing-with-labels

ラベルベースの場合、スライスの開始と停止は包括的であるため、ラベルを使用したスライスは意味的にわずかに異なります。

整数軸ラベルを使用したラベルベースのインデックス作成は、厄介なトピックです。これは、メーリングリストや科学的なPythonコミュニティのさまざまなメンバーの間で頻繁に議論されてきました。パンダでは、私たちの一般的な見方は、ラベルは整数の場所よりも重要であるということです。したがって、整数軸インデックスでは、.ixなどの標準ツールではラベルベースのインデックスのみが可能です。次のコードは例外を生成します

于 2013-02-28T01:53:20.373 に答える
1

From(docs):

スライシングには、整数スライス用の標準のPythonセマンティクスがあります

..。

ラベルベースの場合、スライスの開始と停止は包括的であるため、ラベルを使用したスライスは意味的にわずかに異なります。

于 2013-02-28T01:47:55.250 に答える