Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python列表写入csv中的列_Python_List_Csv - Fatal编程技术网

将Python列表写入csv中的列

将Python列表写入csv中的列,python,list,csv,Python,List,Csv,我有5个相同长度的列表,我想将它们写入CSV中的5列。到目前为止,我只能用以下代码向列中写入一个: with open('test.csv', 'wb') as f: writer = csv.writer(f) for val in test_list: writer.writerow([val]) 如果我为循环添加另一个,它只会将该列表写入同一列。有人知道获得五个独立列的好方法吗?将它们更改为行 rows = zip(list1,list2,list3,li

我有5个相同长度的列表,我想将它们写入CSV中的5列。到目前为止,我只能用以下代码向列中写入一个:

with open('test.csv', 'wb') as f:
    writer = csv.writer(f)
    for val in test_list:
        writer.writerow([val])
如果我为循环添加另一个
,它只会将该列表写入同一列。有人知道获得五个独立列的好方法吗?

将它们更改为行

rows = zip(list1,list2,list3,list4,list5)
那就

import csv

with open(newfilePath, "w") as f:
    writer = csv.writer(f)
    for row in rows:
        writer.writerow(row)
您可以使用组合列表,然后迭代它们

for val in itertools.izip(l1,l2,l3,l4,l5):
    writer.writerow(val)

下面的代码将python列表写入csv中的列

import csv
from itertools import zip_longest
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['f', 'g', 'i', 'j']
d = [list1, list2]
export_data = zip_longest(*d, fillvalue = '')
with open('numbers.csv', 'w', encoding="ISO-8859-1", newline='') as myfile:
      wr = csv.writer(myfile)
      wr.writerow(("List1", "List2"))
      wr.writerows(export_data)
myfile.close()
输出如下所示


如果您愿意使用第三方库,您可以使用Pandas。好处包括无缝访问专用方法和行/列标签:

import pandas as pd

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

df = pd.DataFrame(list(zip(*[list1, list2, list3]))).add_prefix('Col')

df.to_csv('file.csv', index=False)

print(df)

   Col0  Col1  Col2
0     1     4     7
1     2     5     8
2     3     6     9

我不想导入csv以外的任何内容,我所有的列表都有相同数量的项目。这里最重要的答案似乎是将列表分成一行,而不是一列。因此,我在这里得到了答案,并得出如下结论:

import csv
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['f', 'g', 'i', 'j','k']
with open('C:/test/numbers.csv', 'wb+') as myfile:
    wr = csv.writer(myfile)
    wr.writerow(("list1", "list2"))
    rcount = 0
    for row in list1:
        wr.writerow((list1[rcount], list2[rcount]))
        rcount = rcount + 1
    myfile.close()

我只是想补充一点,因为坦率地说,我的头撞了它一段时间,虽然对python来说非常陌生,但它可能会帮助其他人

 writer.writerow(("ColName1", "ColName2", "ColName"))
                 for i in range(len(first_col_list)):
                     writer.writerow((first_col_list[i], second_col_list[i], third_col_list[i]))

值得注意的是,Python3.x中不存在
itertools.izip()
,内置的
zip()
提供了一个迭代器,因此这是一个替代品。还要注意,如果您有列表列表,则可以使用解包操作符(
zip(*lists)
)。这种设计比使用变量
l1
l2
等更好。我得到了如下结果:数组([-23.],dtype=float32),数组([-0.3999986],dtype=float32…如何在没有类型的情况下获得纯值?谢谢Joran!这对我帮助很大,因为我不能使用Pandas。如果您能解释一下为什么这种方法会起作用,并且是对已经提出并接受的答案的改进,那么您的贡献将更有意义。对于python 2.7,请使用from itertools将izip_longest作为zip_longest导入,且换行符=''将引发python 2.7的错误。若要避免此错误,请以“wb”模式而不是“w”模式打开文件。这将消除换行符的需要
 writer.writerow(("ColName1", "ColName2", "ColName"))
                 for i in range(len(first_col_list)):
                     writer.writerow((first_col_list[i], second_col_list[i], third_col_list[i]))