[0:0]のスライスが空の出力を生成するはずだと思います。バグですか?パンダのDataFrame locインデックスのスライス動作が正しくない
>>> df
0 1 2 3
0 1 21 51 61
1 2 22 52 62
2 3 23 53 63
>>> df.loc[0:0]
0 1 2 3
0 1 21 51 61
[0:0]のスライスが空の出力を生成するはずだと思います。バグですか?パンダのDataFrame locインデックスのスライス動作が正しくない
>>> df
0 1 2 3
0 1 21 51 61
1 2 22 52 62
2 3 23 53 63
>>> df.loc[0:0]
0 1 2 3
0 1 21 51 61
いいえ、ロケーションベースのインデックスは、pandas
データ構造のための包括のエンドポイントを持っています。スライス エンドポイントがパンダでラベルベースのスライスが含まれており、包括的ではないとした標準のPythonシーケンスのスライスと比較しCaveats and Gotchas.
を参照してください。 これの主な理由は、 の特定のラベルの後に "後継者"または次の要素を簡単に決定することができないことが多いということです。
あなたが整数位置ベースのインデックスを使用した場合、iloc
のように、これはバニラpython
データ構造のように動作します:
In [5]: df
Out[5]:
0 1 2 3
0 1 21 51 61
1 2 22 52 62
2 3 23 53 63
In [6]: df.iloc[0:0]
Out[6]:
Empty DataFrame
Columns: [0, 1, 2, 3]
Index: []
In [7]: df.loc[0:0]
Out[7]:
0 1 2 3
0 1 21 51 61
In [8]:
スライスは通常、第二の最初のインデックスとの排他的で包括的です。たとえば、次のラベル付きhttp://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html
スライスオブジェクト、例えば:ただし
x = [1,2,3,4,5] print x[0:0] # prints [], the empty list.
、両方の開始と終了インデックスが
loc
機能のために含まれてドキュメントの日として普通言います'a': 'f'(通常の のpythonスライスとは異なり、開始と停止の両方が含まれていることに注意してください)。
なぜパンダがあなたのようにあなたをトロールしたかったのですか?神様しか分からない。
なぜ彼らは言語セマンティクスと矛盾する動作を導入するのですか? –
私は確信していません、私は今もうんざりです。私はあなたがそれを投稿するまで私は実際にこれを知らなかった(私はパンダを頻繁に使用しない、ちょうど純粋なnumpyは通常私のためのトリックを行う) – mwm314
非常に良い答え。しかし、この動作は不快で直感的ではありません – mwm314
この質問をする正しいフォーラムではありません。しかし、スライスが無効になっている/誇張されたエラーがわずかに異なる動作を与えるよりも、平均的な開発者はもっと幸せでした! –
@Ajeet no、ロケーションベースのスライシングは素晴らしく、開発者をより幸せにするでしょう。平均的な開発者は、ドキュメントを読んだほうが幸せです。 –