6

特に Pandas バージョン 0.11 について話しているのは、.ix の使用を .loc または .iloc に置き換えるのに忙しいからです。.loc と .iloc を区別することで、ラベルまたは整数位置でインデックスを作成するつもりかどうかがわかるという事実が気に入っています。どちらもブール配列も受け入れることがわかりますが、意図を明確に伝えるために、それらの使用法を純粋に保ちたいと思います。

4

2 に答える 2

5

11.0 では、3 つの方法すべてが機能します。ドキュメントで提案されている方法は、単純に を使用することdf[mask]です。ただし、これは位置で行われるのではなく、純粋にラベルを使用して行われるため、loc実際に何が起こっているかを最もよく説明していると思います。

更新:これについてgithubで尋ねたところ、 pandas で(整数インデックス付きマスクの場合) または(整数インデックス付きでない場合)df.iloc[msk]が得られるという結論になりました。NotImplementedErrorValueError11.1

In [1]: df = pd.DataFrame(range(5), list('ABCDE'), columns=['a'])

In [2]: mask = (df.a%2 == 0)

In [3]: mask
Out[3]:
A     True
B    False
C     True
D    False
E     True
Name: a, dtype: bool

In [4]: df[mask]
Out[4]:
   a
A  0
C  2
E  4

In [5]: df.loc[mask]
Out[5]:
   a
A  0
C  2
E  4

In [6]: df.iloc[mask]  # Due to this question, this will give a ValueError (in 11.1)
Out[6]:
   a
A  0
C  2
E  4

マスク整数インデックスを指定すると、エラーがスローされることに注意してください。

mask.index = range(5)
df.iloc[mask]  # or any of the others
IndexingError: Unalignable boolean Series key provided

これは iloc が実際には実装されておらず、ラベルを使用していることを示していNotImplementedErrorます。

于 2013-05-17T10:08:56.897 に答える
1

私は現在[]、すなわち__getitem__()、例えばを使用しています

df = pd.DataFrame(dict(a=range(5)))
df[df.a%2==0]
于 2013-05-17T07:32:34.607 に答える