我想对数据帧中的二进制值使用“amp;”操作。对于小于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位数的数字,我得到的是:
^{pr2}$
Tags:
您可以通过执行
df.a.values & 2
来完成,这将绕过pandas重载并在底层Python类型上工作。在区别在于,较大的数字太大,无法放入64位有符号整数类型(
np.int64
),因此pandas将您的列设置为dtypeobject
。在对象列上,&
执行逻辑操作,而不是按位操作。在可以通过以下方式使用无符号整数获得序列:
但显然不能用uint64列创建数据帧,因为uint64 isn't fully supported in pandas。即使可以,如果对uint64使用过大的整数,最终也会遇到相同的问题。在
相关问题 更多 >
编程相关推荐