Python-将值附加到列表列表中的每个子列表

时间:2018-10-24 17:23:58

标签: python python-3.x numpy export-to-csv

我有一些较长的数据集,我试图用numpy读取它们,并将值附加到每一行,然后以CSV格式输出。最终的目标是从同一个文件中拆分多个度量,因此我需要某种方式来标记每个度量。我想到了这个:

def csv_test(data_file):
    data_nd = np.genfromtxt(str(data_file),
    delimiter=";",
    usecols=(-3, -2, -1),
    dtype=None)
    data = np.ndarray.tolist(data_nd)
    output = []
    sub_output = []
    sub1 = str(1)
    for i in data:
        sub_output.append(i)
        sub_output.extend(sub1)
    output.append(sub_output)
    print(output)
    x_val = 1
    x_string = str(x_val)
    filename_out = str("temp_" + x_string + ".csv")
    with open(filename_out, "w") as f:
        writer = csv.writer(f)
        for sublist in output:
            writer.writerows(sublist)

问题是我的输出看起来像这样:

[[[0.0, -0.051, -1.525651e-07], '1', ...

而不是

[[[0.0, -0.051, -1.525651e-07, '1'] ...

因此,在CSV写入步骤中,增加的值会换行。如何将其追加到列表中的子列表中?

样本数据:

0;0.000000;-0.050;-6.900140e-008
0;0.100000;-0.050;-6.843410e-008
0;0.200000;-0.050;-6.778820e-008
0;0.300000;-0.050;-6.654330e-008
0;0.400000;-0.050;-6.598800e-008
0;0.500000;-0.050;-6.497330e-008
0;0.600000;-0.050;-6.415210e-008
0;0.700000;-0.050;-6.349080e-008
0;0.800000;-0.050;-6.181810e-008
0;0.900000;-0.050;-6.148080e-008
0;1.000000;-0.050;-6.032090e-008

2 个答案:

答案 0 :(得分:2)

问题是您应该将str(1)附加到i,而不是sub_output

for i in data:
        sub_output.append(i + [sub1])
        # sub_output.extend(sub1) <-- you don't need this line.

请注意,我们没有i.append(sub1),因为append()方法返回了None。您希望将i的完整列表+ list的单项sub1附加到您的sub_output中。

答案 1 :(得分:0)

一些评论:

1)不要在这里使用.extend,它会分割一个多字符字符串。

2)data已经是副本,您可以直接使用它,而无需创建新的输出

3)由于data的元素是可变的,因此您要做的就是就地更改它们,这就是.append所做的。因此,data = data_nd.tolist()之后的代码可以读取:

for sub_list, new_element in zip(data, stuff_to_append):
    sub_list.append(new_element)

这将以您想要的方式修改data,然后可以将data写入文件。