【问题标题】:How to export array list to csv file?如何将数组列表导出到 csv 文件?
【发布时间】:2020-01-09 01:13:28
【问题描述】:

我正在使用 Python 3.6.8,我一直在寻找一个小白,但我仍然无法正确导出到我想要的 csv。

我有一个一维数组列表,我正在尝试将其导出到 CSV 文件中。每个数组都有不同的大小,我想按照列顺序导出它们,这意味着每个一维数组将存储到 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.savetext 和with 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   

在追加的地方,我在想是否可以通过指定它应该去的列来保存每次数组。

【问题讨论】:

  • 该 csv 布局将难以阅读。您可以在 python 中迭代并逐行编写文件

标签: python numpy csv dataframe arraylist


【解决方案1】:

虽然我不确定你为什么要以这种方式形成 df。

使用:

my_df = pd.DataFrame(list_of_thing)
my_df = my_df.T
my_df.to_csv(csvfile, index=False, header=False)

【讨论】:

  • 效果很好。非常感谢。我不知道我们也可以直接在数据帧上使用转换
【解决方案2】:

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

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     

【讨论】:

    【解决方案3】:

    您可以使用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') 
    

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

    您可能不得不使用列宽和分隔符,尤其是当短列表位于左侧时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 2015-02-19
      • 2020-09-08
      • 2020-02-02
      相关资源
      最近更新 更多