Python 将布尔数据帧转换为二进制数数组
我有一个布尔数据框,如下所示Python 将布尔数据帧转换为二进制数数组,python,pandas,Python,Pandas,我有一个布尔数据框,如下所示 aaa = pd.DataFrame([[False,False,False], [True,True,True]]) 我想把它转换成二进制数数组,对于这个数据帧“aaa”, 结果是[000111] 如何实现此转换 任何帮助都将不胜感激。谢谢您可以: aaa = pd.DataFrame([[False,False,False], [True,True,True]]) aaa=aaa.astype(int) aaa =
aaa = pd.DataFrame([[False,False,False], [True,True,True]])
我想把它转换成二进制数数组,对于这个数据帧“aaa”,
结果是[000111]
如何实现此转换
任何帮助都将不胜感激。谢谢您可以:
aaa = pd.DataFrame([[False,False,False],
[True,True,True]])
aaa=aaa.astype(int)
aaa = pd.DataFrame([[False,False,False],
[True,True,True]])
aaa=aaa.astype(int).astype(str)
[''.join(i) for i in aaa.values.tolist()]
然后,aaa
0 1 2
0 0 0 0
1 1 1 1
如果要获取数组['000','111']
,可以执行以下操作:
aaa = pd.DataFrame([[False,False,False],
[True,True,True]])
aaa=aaa.astype(int)
aaa = pd.DataFrame([[False,False,False],
[True,True,True]])
aaa=aaa.astype(int).astype(str)
[''.join(i) for i in aaa.values.tolist()]
你可以做:
aaa = pd.DataFrame([[False,False,False],
[True,True,True]])
aaa=aaa.astype(int)
aaa = pd.DataFrame([[False,False,False],
[True,True,True]])
aaa=aaa.astype(int).astype(str)
[''.join(i) for i in aaa.values.tolist()]
然后,aaa
0 1 2
0 0 0 0
1 1 1 1
如果要获取数组['000','111']
,可以执行以下操作:
aaa = pd.DataFrame([[False,False,False],
[True,True,True]])
aaa=aaa.astype(int)
aaa = pd.DataFrame([[False,False,False],
[True,True,True]])
aaa=aaa.astype(int).astype(str)
[''.join(i) for i in aaa.values.tolist()]
您可以在
int
和str
之后转换为numpy数组
,然后:
您可以在
int
和str
之后转换为numpy数组
,然后:
你可以乘以a来模拟二的幂,求和,然后转换成二进制
aaa.mul(np.arange(3)[::-1] << 1).sum(1).apply(bin)
0 0b0
1 0b110
dtype: object
您可以通过使用str
操作进一步实现这一点
aaa.mul(
np.arange(3)[::-1] << 1
).sum(1).apply(bin).str.replace('0b', '').str.zfill(3)
0 000
1 110
dtype: object
aaa.mul(
你可以乘以a来模拟二的幂,求和,然后转换成二进制
aaa.mul(np.arange(3)[::-1] << 1).sum(1).apply(bin)
0 0b0
1 0b110
dtype: object
您可以通过使用str
操作进一步实现这一点
aaa.mul(
np.arange(3)[::-1] << 1
).sum(1).apply(bin).str.replace('0b', '').str.zfill(3)
0 000
1 110
dtype: object
aaa.mul(
np.arange(3)[:-1]我会做以下一件事:
a.astype(int).astype(str).sum(axis=1).astype(int).astype(str)
但这对我来说有点太重了
另一种可能性是使用apply:
a.astype(int).astype(str).apply(lambda x: ''.join(list(x)))
但在我看来最干净的是通过乘法获得所需的数字,然后将其转换为二进制:
a.dot([4, 2, 1]).map(lambda x: bin(x))
当然,如果您不想在开头使用“0b”,只需使用
a.dot([4, 2, 1]).map(lambda x: bin(x)[2:])
我将执行以下操作之一:
a.astype(int).astype(str).sum(axis=1).astype(int).astype(str)
但这对我来说有点太重了
另一种可能性是使用apply:
a.astype(int).astype(str).apply(lambda x: ''.join(list(x)))
但在我看来最干净的是通过乘法获得所需的数字,然后将其转换为二进制:
a.dot([4, 2, 1]).map(lambda x: bin(x))
当然,如果您不想在开头使用“0b”,只需使用
a.dot([4, 2, 1]).map(lambda x: bin(x)[2:])
乘法是个好主意!乘法是个好主意!