python-operate矩阵与字符

时间:2015-02-17 20:06:11

标签: python numpy types

假设我有一个包含字符的表格,并希望对数字进行操作:

import numpy
pru=numpy.matrix([['a', 'a','w','a'],[1, 2,4,5],[3, 4,1,2]])

type(pru)
  

numpy.matrixlib.defmatrix.matrix

a=pru[1:3,0]
b=a - a[0]

我收到以下错误:

  

不支持的操作数类型 - :'matrix'和'matrix'

但是,如果我创建另一个包含字符的矩阵,我可以进行减法,但对象的“类型”仍然是相同的:

pru=numpy.matrix([[1, 2,4,5],[3, 4,1,2]])
type(pru)
  

numpy.matrixlib.defmatrix.matrix

a=pru[:,0]
b=a - a[0]

我得到了正确的结果。

所以要把它转换成浮点数我做:

a=a.astype(float)

但我不希望每次需要时都转换元素的每个部分。我希望在一个对象中有不同类型的元素(比如R中的data.frames)。这在Python中是否可行?

2 个答案:

答案 0 :(得分:1)

如果你在Python中寻找数据框对象,你应该使用pandas,而不是numpy。 这将为您提供对标记行和列的更好支持,并允许更轻松地混合数据类型。 在Pandas中,相同类型的列是存储的内容,因此我将您的数据转换为将每种数据类型放在每列中。 这是大熊猫的操作:

from pandas import DataFrame
pru = DataFrame([['a', 1, 3], ['a', 2, 4], ['w', 4, 1], ['a', 5, 2]])
a = pru[[1,2]].ix[0]
b = a - a[1]
b

此外,当使用numpy时,您经常会发现ndarray类的接口比矩阵类更加完善和维护良好。 如果您想制作包含复合类型的数组,可以使用numpy' dtype system

答案 1 :(得分:0)

您必须添加 numpy.object ,如下所示:

pru=numpy.matrix([['a', 'a','w','a'],[1, 2,4,5],[3, 4,1,2]], dtype=numpy.object)

然后:

a=pru[1:3,0]
print a - a[0]

打印:

matrix([[0],
        [2]], dtype=object)