[python] NumPy 배열을 csv 파일로 덤프

NumPy 배열을 CSV 파일로 덤프하는 방법이 있습니까? 2D NumPy 배열이 있으며 사람이 읽을 수있는 형식으로 덤프해야합니다.



답변

numpy.savetxt 배열을 텍스트 파일로 저장합니다.

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


답변

사용할 수 있습니다 pandas. 여분의 메모리가 필요하므로 항상 가능하지는 않지만 매우 빠르고 사용하기 쉽습니다.

import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")

머리글이나 색인을 원하지 않으면 to_csv("/path/to/file.csv", header=None, index=None)


답변

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 파일을 생성하지 않으며 모든 것을 한 줄에 저장합니다.


답변

레코드 배열을 헤더가있는 CSV 파일로 쓰려면 약간 더 많은 작업이 필요합니다.

이 예에서는 첫 번째 줄에 헤더가있는 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())


답변

이미 논의했듯이 배열을 CSV 파일로 덤프하는 가장 좋은 방법은 .savetxt(...)방법 을 사용 하는 것입니다. 그러나 올바르게 수행하기 위해 알아야 할 사항이 있습니다.

예를 들어 dtype = np.int32as 가 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

fmtas 라는 매개 변수를 사용하여 형식을 변경해야합니다.

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

데이터를 원래 형식으로 저장

압축 gz 형식으로 데이터 저장

또한 savetxt데이터를 저장하는 데 사용할 수 있습니다.gz 네트워크를 통해 데이터를 전송할 때 유용 할 수 압축 형식으로 .

.gznumpy는 모든 것을 자동으로 처리 하므로 파일의 확장자를 변경하면 됩니다.

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

그것이 도움이되기를 바랍니다.


답변

다음과 같이 간단하게 수행 할 수 있다고 생각합니다.

  1. Numpy 배열을 Pandas 데이터 프레임으로 변환
  2. CSV로 저장

예 : # 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

예 : # 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


답변

열에 쓰려면 :

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

여기서 ‘a’는 numpy 배열의 이름이고 ‘file’은 파일에 쓸 변수입니다.

행에 쓰려면 :

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