3

開発者が.ixでのビット演算を許可しなかったのはなぜですか?それが技術的な制約の問題なのか、私が見落としている論理的な問題なのか、興味があります。

df.ix[df["ptdelta"]<=0 & df["ptdelta"]>5]

トレースバックは次のとおりです。

TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule 'safe'

'''

:Pandas v0.20以降、.ix インデクサーは.iloc/を優先して非推奨になりました.loc

4

1 に答える 1

7

角かっこ内で何が起こっているのか誤解していると思いますが.ix、それとは何の関係もありません。適切に括弧を付けると、これは機能します。

>>> df = pd.DataFrame({"a": [-1,2,-3,4,6,-8.2]})
>>> df.ix[(df['a'] <= 0) | (df['a'] > 5)]
     a
0 -1.0
2 -3.0
4  6.0
5 -8.2

それ以外の場合は、(おそらく)フロートに対してビット演算を実行しようとしています。たとえば、intの場合、「機能」します。

>>> df['a'] <= 0 & df['a']
Traceback (most recent call last):
  File "<ipython-input-40-9173361ec31b>", line 1, in <module>
    df['a'] <= 0 & df['a']
TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule 'safe'

>>> df['a'] <= 0 & df['a'].astype(int)
0     True
1    False
2     True
3    False
4    False
5     True
Name: a, Dtype: bool
于 2013-03-18T16:13:21.407 に答える