我怎么能&数据框中的大数字?

时间:2015-12-03 19:51:03

标签: python pandas

我想使用“&”操作对数据帧中的二进制值。对于小于20位的数字,这是可以的,如下所示:

import pandas as pd
df=pd.DataFrame({"a":[1234567890123456789,2,3],"b":[4,5,6]})
df[df['a']&2==2]

Out[107]: 
   a  b
1  2  5
2  3  6

df['a']&2
Out[108]: 
0    0
1    2
2    2
Name: a, dtype: int64

但是对于大于19位的数字,我得到了这个:

import pandas as pd
df=pd.DataFrame({"a":[12345678901234567890,2,3],"b":[4,5,6]})
df[df['a']&2==2]

Out[109]: 
Empty DataFrame
Columns: [a, b]
Index: []

df['a']&2
Out[110]: 
0    True
1    True
2    True
Name: a, dtype: bool

1 个答案:

答案 0 :(得分:1)

你可以通过df.a.values & 2来做到这一点,它会绕过pandas重载并处理底层的Python类型。

不同之处在于,您的较大数字太大而无法容纳64位有符号整数类型(np.int64),因此pandas会使您的列为dtype object。在对象列上,&执行逻辑运算,而不执行按位运算。

您可以通过这种方式使用无符号整数获得一系列:

>>> bigNums = pandas.Series([12345678901234567890,2,3], dtype=np.uint64)
>>> bigNums & 2
0    2
1    2
2    2
dtype: uint64

但显然您无法使用uint64列创建DataFrame,因为uint64 isn't fully supported in pandas。即使你可以,如果你使用的整数对于uint64来说太大了,你最终也会遇到同样的问题。