我需要编写一个收集不同数据集并将它们统一起来的程序。为此,我必须用逗号分隔的矩阵读取:在这种情况下,每行代表一个实例(在本例中为蛋白质),每列代表实例的属性。如果实例具有属性,则由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来创建给定大小的数组,但似乎你必须预先选择字符串的长度,然后才能更改它们。
有没有更好的方法来处理这些数据?我还想到了列表的字典,但是我不能选择单列。
答案 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)