首页 文章

将NumPy数组转储到csv文件中

提问于
浏览
369

有没有办法将NumPy数组转储到CSV文件中?我有一个2D NumPy数组,需要以人类可读的格式转储它 .

9 回答

  • 0

    numpy.savetxt将数组保存到文本文件中 .

    import numpy
    a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
    numpy.savetxt("foo.csv", a, delimiter=",")
    
  • 68

    if you want to write in column:

    for x in np.nditer(a.T, order='C'): 
                file.write(str(x))
                file.write("\n")
    

    这里'a'是numpy数组的名称,'file'是要写入文件的变量 .

    If you want to write in row:

    writer= csv.writer(file, delimiter=',')
        for x in np.nditer(a.T, order='C'): 
                row.append(str(x))
        writer.writerow(row)
    
  • 11

    在Python中,我们使用csv.writer()模块将数据写入csv文件 . 该模块类似于csv.reader()模块 .

    import csv
    
    person = [['SN', 'Person', 'DOB'],
    ['1', 'John', '18/1/1997'],
    ['2', 'Marie','19/2/1998'],
    ['3', 'Simon','20/3/1999'],
    ['4', 'Erik', '21/4/2000'],
    ['5', 'Ana', '22/5/2001']]
    
    csv.register_dialect('myDialect',
    delimiter = '|',
    quoting=csv.QUOTE_NONE,
    skipinitialspace=True)
    
    with open('dob.csv', 'w') as f:
        writer = csv.writer(f, dialect='myDialect')
        for row in person:
           writer.writerow(row)
    
    f.close()
    

    分隔符是用于分隔字段的字符串 . 默认值为逗号(,) .

  • 31

    你也可以使用纯python而不使用任何模块 .

    # format as a block of csv text to do whatever you want
    csv_rows = ["{},{}".format(i, j) for i, j in array]
    csv_text = "\n".join(csv_rows)
    
    # write it to a file
    with open('file.csv', 'w') as f:
        f.write(csv_text)
    
  • 596

    tofile是一个方便的功能:

    import numpy as np
    a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
    a.tofile('foo.csv',sep=',',format='%10.5f')
    

    手册页有一些有用的注释:

    这是一种便于快速存储阵列数据的功能 . 有关字节序和精度的信息会丢失,因此对于要在具有不同字节序的计算机之间存档数据或传输数据的文件,此方法不是一个好的选择 . 通过以速度和文件大小为代价输出数据作为文本文件,可以克服其中一些问题 .

    注意 . 此函数不会生成多行csv文件,它会将所有内容保存到一行 .

  • 1

    如果要将numpy数组(例如 your_array = np.array([[1,2],[3,4]]) )保存到一个单元格,可以先使用 your_array.tolist() 进行转换 .

    然后以正常方式将其保存到一个单元格,使用 delimiter=';' 并且csv文件中的单元格将如下所示 [[1, 2], [2, 4]]

    然后你可以像这样恢复你的数组: your_array = np.array(ast.literal_eval(cell_string))

  • 2

    如前所述,将阵列转储为CSV文件的最佳方法是使用 .savetxt(...) 方法 . 但是,我们应该知道某些事情要做得恰当 .

    例如,如果你有一个带有 dtype = np.int32 的numpy数组

    narr = np.array([[1,2],
                     [3,4],
                     [5,6]], dtype=np.int32)
    

    并希望使用 savetxt 保存

    np.savetxt('values.csv', narr, delimiter=",")
    

    它将以浮点指数格式存储数据

    1.000000000000000000e+00,2.000000000000000000e+00
    3.000000000000000000e+00,4.000000000000000000e+00
    5.000000000000000000e+00,6.000000000000000000e+00
    

    您必须使用名为 fmt as的参数更改格式

    np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
    

    以原始格式存储数据

    以压缩gz格式保存数据

    此外, savetxt 可用于以 .gz 压缩格式存储数据,这在通过网络传输数据时可能很有用 .

    我们只需要将文件的扩展名更改为 .gz ,numpy将自动处理所有内容

    np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
    

    希望能帮助到你

  • 3

    大熊猫简单快捷

    import pandas as pd 
    df = pd.DataFrame(np_array)
    df.to_csv("file_path.csv")
    
  • 2

    将记录数组写为带有 Headers 的CSV文件需要更多的工作 .

    此示例读取带有第一行 Headers 的CSV文件,然后写入相同的文件 .

    import numpy as np
    
    # Write an example CSV file with headers on first line
    with open('example.csv', 'w') as fp:
        fp.write('''\
    col1,col2,col3
    1,100.1,string1
    2,222.2,second string
    ''')
    
    # Read it as a Numpy record array
    ar = np.recfromcsv('example.csv')
    print(repr(ar))
    # rec.array([(1, 100.1, 'string1'), (2, 222.2, 'second string')], 
    #           dtype=[('col1', '<i4'), ('col2', '<f8'), ('col3', 'S13')])
    
    # Write as a CSV file with headers on first line
    with open('out.csv', 'w') as fp:
        fp.write(','.join(ar.dtype.names) + '\n')
        np.savetxt(fp, ar, '%s', ',')
    

    请注意,此示例不考虑带逗号的字符串 . 要考虑非数字数据的引号,请使用csv包:

    import csv
    
    with open('out2.csv', 'wb') as fp:
        writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC)
        writer.writerow(ar.dtype.names)
        writer.writerows(ar.tolist())
    

相关问题