繁体   English   中英

CSV的2D列表-按列

[英]2D list to csv - by column

我想将2D列表的内容导出到csv文件中。

子列表的大小可以不同。 例如,2D列表可以是:

a = [['a','b','c','d'],['e','f'],['g'],[],['h','i']]

我希望我的csv像这样存储数据-“按列”:

a,e,g, ,h
b,f, , ,i
c
d

我是否必须添加一些空格以使每个子列表具有相同的大小? 还是有另一种方法?

谢谢您的帮助

您可以使用itertools.zip_longest

import itertools, csv
a = [ ['a','b','c','d'], ['e','f'], ['g'], [], ['h','i'] ]
with open('filename.csv', 'w') as f:
  write = csv.writer(f)
  write.writerows(list(itertools.zip_longest(*a, fillvalue=''))) 

输出:

a,e,g,,h
b,f,,,i
c,,,,
d,,,,

可以使用熊猫和转置函数(T)来完成

import pandas as pd
pd.DataFrame(a).T.to_csv('test.csv')

结果:(test.csv)

 ,0,1,2,3,4
0,a,e,g,,h
1,b,f,,,i
2,c,,,,
3,d,,,,
import itertools
import pandas as pd

首先使用嵌套数组创建一个数据框:

a = ['a','b','c','d']
b = ['e','f']
c = ['g']
d = []
e = ['h','i'] 

nest = [a,b,c,d,e]

df = pd.DataFrame((_ for _ in itertools.zip_longest(*nest)), columns=['a', 'b', 'c', 'd', 'e'])

像那样:

    a   b       c       d       e
0   a   e       g       None    h
1   b   f       None    None    i
2   c   None    None    None    None
3   d   None    None    None    None

然后使用熊猫存储它:

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

我们要在此处执行三个任务:填充子列表,使它们都具有相同的长度,转置并写入csv 遗憾的是,Python没有内置的填充函数,但是它可以相对轻松地完成,我可以按照以下方式进行操作(以下代码旨在提供OP中要求的结果):

a = [['a','b','c','d'],['e','f'],['g'],[],['h','i']]
ml = max([len(i) for i in a]) #number of elements of longest sublist
a = [(i+[' ']*ml)[:ml] for i in a] #adding ' ' for sublist shorter than longest
a = list(zip(*a)) #transpose
a = [','.join(i) for i in a] #create list of lines to be written
a = [i.rstrip(', ') for i in a] #jettison spaces if not followed by value
a = '\n'.join(a) #create string to be written to file
with open('myfile.csv','w') as f: f.write(a)

myfile.csv内容:

a,e,g, ,h
b,f, , ,i
c
d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM