将列表元素转换为数组

时间:2014-06-09 00:32:26

标签: python arrays list hadoop

我有一个列表tsv文件,我正在解析并希望将其转换为数组。

这是文件格式 -

jobname1 queue maphours reducehours
jobname2 queue maphours reducehours

with open(file.tsv) as tsv:
    line = [elem.strip().split('\t') for elem in tsv]
    vals = np.asarray(line)
    print vals[0]
    print vals[4]

Vals当前返回以下输出 -

['job1', 'queue', '1.0', '0.0\n']
['job2', 'queue', '1.0', '0.0\n']

我想将整个文件中一行中的每个元素转换为数组对象 -

vals[0] = job1 vals[1] = queue vals[2] = 1.0 vals[3] = 0.0 

我如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

根据我的理解,你想在numpy中创建2D数组,其中文件的每一行是一行,对应于创建的数组,文件中的列是数组中的一列。如果是这样,您可以按如下方式执行此操作:

例如,如果您的数据文件是:

jobname1    queue   1   3
jobname2    queue   2   4
jobname41   queue   1   1
jobname32   queue   2   2
jobname21   queue   3   4
jobname12   queue   1   6

以下代码:

with open(file) as tsv:
    line = [elem.strip().split('\t') for elem in tsv]

vals = np.asarray(line) 

将生成以下vals数组:

[['jobname1' 'queue' '1' '3']
 ['jobname2' 'queue' '2' '4']
 ['jobname41' 'queue' '1' '1']
 ['jobname32' 'queue' '2' '2']
 ['jobname21' 'queue' '3' '4']
 ['jobname12' 'queue' '1' '6']]

获取你可以做的工作名称:

print(vals[:,0])
% gives ['jobname1' 'jobname2' 'jobname41' 'jobname32' 'jobname21' 'jobname12']

或者如果您想要包含某些作业的行,您可以这样做:

print(vals[np.apply_along_axis(lambda row: row[0] == 'jobname1', 1, vals)])

答案 1 :(得分:1)

您确定需要阵列吗?如果你想要一个Numpy阵列,@ Marcin的答案会更完整。

Python没有数组数据结构(这里有Python数据结构列表here)。有一个"thin wrapper around the C array"。为了在C数组周围使用包装器,您必须指定数组将保存的类型(here您将在顶部找到一个类型代码列表,并在底部找到示例):

如果你想使用numpy数组,这应该有效:

import numpy as np
myarray = np.asarray(yourList)

here采用。