如何将阵列列表导出到csv文件?

时间:2019-09-06 07:05:41

标签: python numpy csv dataframe arraylist

我正在使用Python 3.6.8,并且我一直在寻找一点白色,但是仍然无法正确导出到想要的csv中。

我有一个一维数组的列表,我试图将其导出到CSV文件中。每个数组都有不同的大小,我想按列顺序导出它们,这意味着每个1D数组将存储到CSV文件的1列中。

为简化我的代码,它将执行以下操作:

import pandas as pd

list_of_thing = []
a = np.arange(10)
list_of_thing.append(a)
b = np.arange(5)
list_of_thing.append(b)

csvfile = "./data.csv"
my_df = pd.DataFrame(list_of_thing)
my_df.to_csv(csvfile, index=False, header=False)

我还尝试使用np.savetextwith open(csvfile, "w") as output:并没有太大的成功。

我得到的是这个

0   1   2   3   4   5   6   7   8   9
0   1   2   3   4                   

我希望它看起来像这样

0   0
1   1
2   2
3   3
4   4
5   
6   
7   
8   
9   

在附加的地方,我在考虑是否有可能通过指定应在其处的列来保存每次数组。

3 个答案:

答案 0 :(得分:2)

尽管我不确定为什么您要以这种方式形成df。

使用:

SELECT '2018-06-25T06:00:00Z'::TIMESTAMPTZ AT TIME ZONE 'Europe/Helsinki';

答案 1 :(得分:0)

这里是一种将不同大小的列表输入到列的方法,我用字符“”填充了较小的列表:

import pandas as pd

a = np.arange(10)
b = np.arange(5)

maxLen = max(len(a), len(b))

fill_char = ""
a = list(a) + [fill_char]*(maxLen - len(a))
b = list(b) + [fill_char]*(maxLen - len(b))

my_df = pd.DataFrame(list(zip(a,b)),columns=["col1","col2"])

print(my_df)

   col1 col2
0     0    0
1     1    1
2     2    2
3     3    3
4     4    4
5     5     
6     6     
7     7     
8     8     
9     9     

答案 2 :(得分:0)

您可以使用zip_longest来“转置”具有空白填充值的数组列表:

In [120]: from itertools import zip_longest

In [129]: alist = list(zip_longest(np.arange(10), np.arange(5),fillvalue=''))                                
In [130]: alist                                                                                              
Out[130]: 
[(0, 0),
 (1, 1),
 (2, 2),
 (3, 3),
 (4, 4),
 (5, ''),
 (6, ''),
 (7, ''),
 (8, ''),
 (9, '')]

(默认填充值为None

然后将其写入一个文件,一个元组一个元组:

In [131]: with open('foobar.txt','w') as f: 
     ...:     for row in alist: 
     ...:         print('{} {}'.format(*row), file=f) 
     ...:                                                                                                    
In [132]: cat foobar.txt                                                                                     
0 0
1 1
2 2
3 3
4 4
5 
6 
7 
8 
9 

这也可以用savetxt编写:

np.savetxt('foobar.txt',alist, fmt='%s') 

对于string元素,我必须使用'%s'formatting rather than a numeric one. savetxt`进行行迭代,所以速度不会更快。

您可能必须使用列宽和定界符,尤其是在左侧有简短列表的情况下。