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.int32
as 가 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=",")
그것이 도움이되기를 바랍니다.
답변
다음과 같이 간단하게 수행 할 수 있다고 생각합니다.
- Numpy 배열을 Pandas 데이터 프레임으로 변환
- 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)