Python 在一个NumPy数组中存储不同的数据类型?

Python 在一个NumPy数组中存储不同的数据类型?,python,arrays,types,numpy,Python,Arrays,Types,Numpy,我有两个不同的数组,一个带有字符串,另一个带有int。我想将它们连接到一个数组中,其中每个列都具有原始数据类型。我目前的解决方案(见下文)将整个数组转换为dtype=string,这似乎是非常低内存效率的 combined_array=np.连接((A,B),axis=1) 当A.dtype=string和B.dtype=int时,组合数组中是否可能存在多个数据类型?一种方法可能是使用。“列”与标准numpy数组的列不同,但对于大多数用例来说,这就足够了: >>> a = nu

我有两个不同的数组,一个带有字符串,另一个带有int。我想将它们连接到一个数组中,其中每个列都具有原始数据类型。我目前的解决方案(见下文)将整个数组转换为dtype=string,这似乎是非常低内存效率的

combined_array=np.连接((A,B),axis=1)


A.dtype=string
B.dtype=int
时,
组合数组中是否可能存在多个数据类型?

一种方法可能是使用。“列”与标准numpy数组的列不同,但对于大多数用例来说,这就足够了:

>>> a = numpy.array(['a', 'b', 'c', 'd', 'e'])
>>> b = numpy.arange(5)
>>> records = numpy.rec.fromarrays((a, b), names=('keys', 'data'))
>>> records
rec.array([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)], 
      dtype=[('keys', '|S1'), ('data', '<i8')])
>>> records['keys']
rec.array(['a', 'b', 'c', 'd', 'e'], 
      dtype='|S1')
>>> records['data']
array([0, 1, 2, 3, 4])
a=numpy.array(['a','b','c','d','e']) >>>b=努比·阿兰奇(5) >>>records=numpy.rec.fromarrays((a,b),name=('keys','data')) >>>记录 记录数组([('a',0),('b',1),('c',2),('d',3),('e',4)],
dtype=[('keys','S1'),('data','p>一个简单的解决方案:将数据转换为对象'O'类型

z = np.zeros((2,2), dtype='U2')
o = np.ones((2,1), dtype='O')
np.hstack([o, z])
创建阵列:

array([[1, '', ''],
       [1, '', '']], dtype=object)
参考,有一个名为
numpy.lib.recfunctions.merge_arrays
的函数,可用于将不同数据类型的numpy数组合并到结构化数组或记录数组中

例如:

>>> from numpy.lib import recfunctions as rfn
>>> A = np.array([1, 2, 3])
>>> B = np.array(['a', 'b', 'c'])
>>> b = rfn.merge_arrays((A, B))
>>> b
array([(1, 'a'), (2, 'b'), (3, 'c')], dtype=[('f0', '<i4'), ('f1', '<U1')])
>>从numpy.lib导入函数作为rfn
>>>A=np.array([1,2,3])
>>>B=np.array(['a','B','c'])
>>>b=rfn.merge_数组((A,b))
>>>b

数组([(1,'a'),(2,'b'),(3,'c')],数据类型=[('f0',问题是关于使用NumPy数组。但是,如果没有必要使用NumPy数组,那么a在这种情况下会很好地工作。如果你真的想对该数组的切片执行任何有意义的操作,这会导致各种各样的问题。什么样的问题?@Astrid你能详细说明你的想法吗?假设,为了参数起见,您将其转换为一个数据帧。然后您希望过滤该数据帧中的对象,比如说
df.loc[(df.col==item)]
这是行不通的,因为当pandas进行过滤时,它希望所有项目都是同一类型的。因此,例如,如果您在同一列中混合字符串和整数,那么您将有效地比较苹果和桔子。因此pandas将抛出一个错误。
arr=np.array([('cat',5),('dog',20)],dtype=[('name',np.object),('age',np.int)]
name列可由结构化数组中的arr['name']访问
array([[1, '', ''],
       [1, '', '']], dtype=object)
>>> from numpy.lib import recfunctions as rfn
>>> A = np.array([1, 2, 3])
>>> B = np.array(['a', 'b', 'c'])
>>> b = rfn.merge_arrays((A, B))
>>> b
array([(1, 'a'), (2, 'b'), (3, 'c')], dtype=[('f0', '<i4'), ('f1', '<U1')])