如果与另一个数组连接,为什么 numpy 布尔数组会变成整数?

Why does numpy array of booleans change to integers if concatenated with another array?

如果我使用np.concatenate加入这个1x5数组

array([True , False, False, True , True  ])

用这个 1x5 阵列

array([4.753, 1.202, 2.296, 1.668, 3.35  ])

布尔值更改为整数:

array([[1.   , 0.   , 0.   , 1.   , 1.   ],
       [4.753, 1.202, 2.296, 1.668, 3.35 ]])

为什么?我怎样才能在不影响布尔值的情况下连接它们?

理想情况下,输出可以是 pandas DataFrame

一种方法是将各个数组的 dtype 设置为 object(您只需要其中一个为 object 类型即可生成 object 类型数组)

a = np.array([[True , False, False, True , True]], dtype=object)
b = np.array([[4.753, 1.202, 2.296, 1.668, 3.35]])

np.concatenate([a,b])
array([[True, False, False, True, True],
       [4.753, 1.202, 2.296, 1.668, 3.35]], dtype=object)

您也可以在定义数组后使用arr.astype()将每个数组转换为object类型。

a.astype(object)
#array([[True, False, False, True, True]], dtype=object)

是这样的吗?

In [445]: import numpy as np
     ...: import pandas as pd

In [446]: data = {'Booleans': np.array([True, False, False, True, True]), 
     ...:          'Floats': np.array([4.753, 1.202, 2.296, 1.668, 3.35])}

In [447]: df = pd.DataFrame(data)

In [448]: df
Out[448]: 
   Booleans  Floats
0      True   4.753
1     False   1.202
2     False   2.296
3      True   1.668
4      True   3.350

您可能会发现此 link 有用:Different ways to create Pandas Dataframe