我有一个数据帧大熊猫,取名为“impression_data”,其中包括一个名为列“site.id,”像这样:成员测试产生意想不到的结果
>>> 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
的列不应包含任何十进制值。显然我错了。这里发生了什么?
>>> 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
这里
你确定每个值都是int吗? 'impression_data ['site.id']。map(type).unique()'给了什么?你能否提供演示问题的示例代码和数据? – BrenBarn
感谢您的快速回复,@BrenBarn。我接受了关于尝试'impression_data ['site.id']。map(type).unique()'的建议'并编辑了我的问题以反映这一点。示例代码和数据即将推出。 – avn2109
历史上使用'in'作为numpy数组可能会产生奇怪的结果 - 我会建议类似'np.any(df ['site.id']。isin([62.5]))''。 – Daniel