0

次のような「site.id」という列を含む「impression_data」という名前の Pandas データフレームがあります。

   >>> impression_data['site.id']

0      62
1     189
2     191
3      62
...

この列の各項目には、次のようにデータ型 numpy.int64 があります。

>>> for i in impression_data['site.id']:
    print type(i)

<type 'numpy.int64'>
<type 'numpy.int64'>
<type 'numpy.int64'>
...

期待どおり、整数をテストする限り、メンバーシップ テストはうまく機能します。

>>> 62 in impression_data['site.id']
True

np.int64しかし、ここに予想外の結果があります。私は、 の列には 10 進数の値を一切含めるべきではないという印象を受けました。どうやら私は間違っているようです。何が起きてる?

>>> 62.5 in impression_data['site.id']
True

編集 1: 列のすべての値は、構造上整数である必要があります。完全を期すために、次のキャスト操作も実行しましたが、エラーは発生しませんでした。

impression_data['site.id'] = impression_data['site.id'].astype('int')

コメントでの@BremBamの提案に従って、私は試しました

impression_data['site.id'].map(type).unique()

生産する

[<type 'numpy.int64'>]

最小限の例と私が扱っている実際のデータファイルはこちら https://dl.dropboxusercontent.com/u/28347262/SE%20Pandas%20Int64%20Membership%20Testing/cm_impression.csv

そしてここ

https://dl.dropboxusercontent.com/u/28347262/SE%20Pandas%20Int64%20Membership%20Testing/ExampleCode.py

4

2 に答える 2

1

これはpandas のバグです。値は、包含テストが行​​われる前にインデックスの型にキャストされるため、 に62.5変換され62ます。( Series の場合、値が値ではなくindexinにあるかどうかをチェックすることに注意してください。)

私はあなたがしたいことをすることによって得ることができると信じています62.5 in impression_data.values

于 2014-01-26T19:38:33.237 に答える