建议在python中创建包含字符串的矩阵的方法

时间:2013-08-14 11:17:37

标签: python arrays string numpy

我需要编写一个收集不同数据集并将它们统一起来的程序。为此,我必须用逗号分隔的矩阵读取:在这种情况下,每行代表一个实例(在本例中为蛋白质),每列代表实例的属性。如果实例具有属性,则由1表示,否则为0.矩阵看起来像下面给出的示例,但更大,有35000个实例和数百个属性。

Proteins,Attribute 1,Attribute 2,Attribute 3,Attribute 4
Protein 1,1,1,1,0
Protein 2,0,1,0,1
Protein 3,1,0,0,0
Protein 4,1,1,1,0
Protein 5,0,0,0,0
Protein 6,1,1,1,1

我需要一种方法来存储矩阵,然后再写入包含实例的其他信息的新文件。我想过使用numpy数组,因为我希望能够选择和检查单列。我尝试使用numpy.empty来创建给定大小的数组,但似乎你必须预先选择字符串的长度,然后才能更改它们。

有没有更好的方法来处理这些数据?我还想到了列表的字典,但是我不能选择单列。

3 个答案:

答案 0 :(得分:1)

看看pandas

  pandas是一个开源的,获得BSD许可的库,为Python编程语言提供高性能,易于使用的数据结构和数据分析工具。

答案 1 :(得分:1)

您可以使用numpy.loadtxt,例如:

import numpy as np
a = np.loadtxt(filename, delimiter=',',usecols=(1,2,3,4),
               skiprows=1, dtype=float)

这将导致类似:

#array([[ 1.,  1.,  1.,  0.],
#       [ 0.,  1.,  0.,  1.],
#       [ 1.,  0.,  0.,  0.],
#       [ 1.,  1.,  1.,  0.],
#       [ 0.,  0.,  0.,  0.],
#       [ 1.,  1.,  1.,  1.]])

或者,使用structured arrays(`np.recarray'):

a = np.loadtxt('stack.txt', delimiter=',',usecols=(1,2,3,4),
        skiprows=1, dtype=[('Attribute 1', float),
                           ('Attribute 2', float),
                           ('Attribute 3', float),
                           ('Attribute 4', float)])

从哪里可以得到每个字段:

a['Attribute 1']
#array([ 1.,  0.,  1.,  1.,  0.,  1.])

答案 2 :(得分:0)

您可以改为使用genfromtxt

data = np.genfromtxt('file.txt', dtype=None)

这将创建表格的structured array (aka record array)