Dump a NumPy array into a csv file

前端 未结 10 1117

Is there a way to dump a NumPy array into a CSV file? I have a 2D NumPy array and need to dump it in human-readable format.

相关标签:
10条回答
  • 2020-11-22 13:18

    I believe you can also accomplish this quite simply as follows:

    1. Convert Numpy array into a Pandas dataframe
    2. Save as CSV

    e.g. #1:

        # Libraries to import
        import pandas as pd
        import nump as np
    
        #N x N numpy array (dimensions dont matter)
        corr_mat    #your numpy array
        my_df = pd.DataFrame(corr_mat)  #converting it to a pandas dataframe
    

    e.g. #2:

        #save as csv 
        my_df.to_csv('foo.csv', index=False)   # "foo" is the name you want to give
                                               # to csv file. Make sure to add ".csv"
                                               # after whatever name like in the code
    
    0 讨论(0)
  • 2020-11-22 13:27

    if you want to write in column:

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

    Here 'a' is the name of numpy array and 'file' is the variable to write in a 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)
    
    0 讨论(0)
  • 2020-11-22 13:29

    Writing record arrays as CSV files with headers requires a bit more work.

    This example reads from a CSV file ('example.csv') and writes its contents to another CSV file (out.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', ',')
    

    Note that the above example cannot handle values which are strings with commas. To always enclose non-numeric values within quotes, use the csv package:

    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())
    
    0 讨论(0)
  • 2020-11-22 13:30

    You can also do it with pure python without using any modules.

    # 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)
    
    0 讨论(0)
提交回复
热议问题