我有一个名为“impression_data”的 Pandas 数据框,其中包含一个名为“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
's 列不应该包含任何十进制值。显然我错了。这里发生了什么?
>>> 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
和这里