如何将两个1D列表合并为2D数组?

时间:2019-01-17 05:41:11

标签: python list numpy

我正在尝试使用Pyteomics的mzxml类读取mzXML文件。我需要访问的元素为numpy.ndarray格式,我将其转换为列表。 mzXML文件包含几列,并以列表作为值。主要目的是将两个列表组合成2D数组(逐列并排),以便我可以另存为CSV文件。

我尝试使用np.concatenate((mzplist, mzplist2), axis=1),它产生了axis=1错误,指出axis=1对于一维数组而言是超出范围的。我也尝试使用hstackcolumn_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, ...]

我想念什么吗?

2 个答案:

答案 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_stackc_将产生相同的数组。

如果外部阅读器需要,则可以添加','分隔符。

您知道如何读取以纯文本形式编写的savetxt的输出吗?我正在使用bash外壳cat

当人们在读写csv文件时遇到问题时,我们通常会要求提供样本,以便我们重现问题。如果需要的话,中间数组的样本(例如column_stack的输出)可能会有所帮助。否则,我们只能猜测问题出在哪里。