我正在尝试使用Pyteomics的mzxml
类读取mzXML文件。我需要访问的元素为numpy.ndarray
格式,我将其转换为列表。 mzXML文件包含几列,并以列表作为值。主要目的是将两个列表组合成2D数组(逐列并排),以便我可以另存为CSV文件。
我尝试使用np.concatenate((mzplist, mzplist2), axis=1)
,它产生了axis=1
错误,指出axis=1
对于一维数组而言是超出范围的。我也尝试使用hstack
,column_stack
。我最接近的是来自column_stack
(下面的代码),但是当我查看生成的CSV文件时,生成的数组为1D(Excel的每个单元格均包含m / z值和强度值,并用空格分隔)。
plist = []
for files in os.listdir(full_path):
filename = os.path.basename(files)
with mzxml.read(full_path + '\\' + filename) as reader:
for line in reader:
mzplist = line['m/z array'].tolist()
mzplist2 = line['intensity array'].tolist()
print(type(mzplist))
mzplist = np.column_stack([mzplist, mzplist2])
#mzplist.columns = ['mass', 'Intensity']
np.savetxt(newfolder + '\\' + filename + '.csv', mzplist)
plist = []
mzplist = []
mzplist2 = []
mzplist
的预期结果:
Mass Intensity
1 2
3 4
5 6
这里line['m/z array'].tolist()
产生列表[1, 3, 5, ...]
,而line['intensity array'].tolist()
产生列表[2, 4, 6, ...]
。
我想念什么吗?
答案 0 :(得分:2)
Excel的每个单元格均包含以空格分隔的m / z值和强度值
我怀疑问题源是那条线
np.savetxt
由于空格是np.savetxt(newfolder + '\\' + filename + '.csv', mzplist, delimiter=',')
(as documentation say)的默认定界符,请尝试将行替换为
try/except
并检查是否有帮助。
答案 1 :(得分:1)
有2个您所描述的列表:
In [39]: alist=[1,3,5,7]; blist=[2,4,6,8]
将它们组合成数组的自然方法是:
In [40]: arr = np.array((alist, blist))
In [41]: arr
Out[41]:
array([[1, 3, 5, 7],
[2, 4, 6, 8]])
该数组的转置看起来像:
In [42]: arr.T
Out[42]:
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
我们可以用savetxt
编写为:
In [44]: np.savetxt('foo.txt', arr.T, fmt='%5d')
In [45]: cat foo.txt
1 2
3 4
5 6
7 8
column_stack
和c_
将产生相同的数组。
如果外部阅读器需要,则可以添加','分隔符。
您知道如何读取以纯文本形式编写的savetxt
的输出吗?我正在使用bash
外壳cat
。
当人们在读写csv
文件时遇到问题时,我们通常会要求提供样本,以便我们重现问题。如果需要的话,中间数组的样本(例如column_stack
的输出)可能会有所帮助。否则,我们只能猜测问题出在哪里。