【问题标题】:How can I write np.arrays to a csv iteratively?如何迭代地将 np.arrays 写入 csv?
【发布时间】:2019-12-04 07:04:33
【问题描述】:

我想将一堆客户数据写入一个 csv 文件,这些数据存储在一个 np 数组中。首先,我想附加一个客户 ID 和部门名称,然后我想将记录作为一行添加到 csv 中,最终结果如下所示:

0,a,0.5,0.1,0.7,0.9,1.2
1,a,0.6,0.8,0.7,1.9,1.2
2,a,0.8,1.1,1.7,1.9,0.2
3,a,0.5,0.8,1.7,1.3,1.2
.....

等等……

我正在使用一个看起来像这样的循环:

import numpy as np
ID = 0 
Dept = 'a'
with open('test_file.csv', 'w') as train_file:
    for _ in range(10):
        noise = np.random.normal(0, 0.5, 20)
        noise = np.append([ID,Dept],noise)
        np.savetxt(train_file, noise,fmt='%s',delimiter=",")
        ID +=1 

但它给出了一个奇怪的输出,只有第一行被写入文件并且在列而不是行中:

0
a
0.13413237923120783
-0.35992427454477954
0.0438584146450925
0.3692908225112282 
0.5815011967140531
0.9963752057887987
0.1648769579313785
-0.7986834355365774
0.0547352924307264

我该如何解决这个问题?

【问题讨论】:

  • 自己做一个train_file.write(...) 怎么样。?使用常规 Python 字符串格式根据需要格式化该行。也就是说,实际上,savetxt 做了什么。如果有的话,写行会更快,并且会给你更多的控制权。

标签: python csv numpy


【解决方案1】:

直接写csv文件的例子:

In [10]: ID=0 
    ...: with open('test.csv','w') as f:     
    ...:     fmt = '%2s, %2s, '+', '.join(['%5.2f']*6) + '\n' 
    ...:     for _ in range(5): 
    ...:         x = np.random.normal(0, 0.5, 6) 
    ...:         astr = fmt%(ID, Dept, *x) 
    ...:         f.write(astr) 
    ...:         ID += 1 
    ...:                                                                                                     
In [11]: cat test.csv                                                                                        
 0,  a, -0.22,  0.77,  0.32, -0.05,  0.11,  0.36
 1,  a, -0.21, -0.38,  0.68,  0.68, -0.09,  0.47
 2,  a, -0.33,  0.67,  0.64, -0.24,  0.01,  0.91
 3,  a, -0.28,  0.17, -0.06,  0.83, -0.68,  0.43
 4,  a, -0.73, -0.23,  0.28, -0.70, -0.04, -0.33

【讨论】:

    【解决方案2】:

    一种方法是将数组重塑为 (1, N) 的维度,如下所示:

    np.savetxt(train_file, noise.reshape(1,noise.shape[0]), fmt='%s', delimiter=",")
    

    【讨论】:

    • 谢谢。当 np 数组全部为 int 时有效,但是当将 str 附加到开头时它会失败。
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2016-07-21
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多