Câu trả lời:
numpy.savetxt
lưu một mảng vào một tệp văn bản.
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
numpy.array
chuỗi. Bạn có thể chỉ định một phương thức để lưu dưới dạng csv cho một numpy.array
đối tượng có chứa các chuỗi không?
fmt='%s'
Bạn có thể sử dụng pandas
. Nó cần thêm một số bộ nhớ để không phải lúc nào cũng có thể, nhưng nó rất nhanh và dễ sử dụng.
import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")
nếu bạn không muốn một tiêu đề hoặc chỉ mục, hãy sử dụng to_csv("/path/to/file.csv", header=None, index=None)
df.to_csv("file_path.csv", header=None)
header=None, index=None
loại bỏ hàng tiêu đề và cột chỉ mục.
comments
đối số từ khóa thành ''
, #
sẽ bị loại bỏ.
tofile
là một chức năng thuận tiện để làm điều này:
import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile('foo.csv',sep=',',format='%10.5f')
Trang người đàn ông có một số lưu ý hữu ích:
Đây là một chức năng tiện lợi để lưu trữ nhanh chóng dữ liệu mảng. Thông tin về độ bền và độ chính xác bị mất, vì vậy phương pháp này không phải là lựa chọn tốt cho các tệp nhằm lưu trữ dữ liệu hoặc vận chuyển dữ liệu giữa các máy có độ bền khác nhau. Một số vấn đề này có thể được khắc phục bằng cách xuất dữ liệu dưới dạng tệp văn bản, với chi phí tốc độ và kích thước tệp.
Ghi chú. Hàm này không tạo ra các tệp csv nhiều dòng, nó lưu mọi thứ vào một dòng.
Viết mảng bản ghi dưới dạng tệp CSV với các tiêu đề đòi hỏi nhiều công việc hơn một chút.
Ví dụ này đọc một tệp CSV có tiêu đề trên dòng đầu tiên, sau đó ghi cùng một tệp.
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', ',')
Lưu ý rằng ví dụ này không xem xét các chuỗi có dấu phẩy. Để xem xét báo giá cho dữ liệu không phải là số, hãy sử dụng csv
gói:
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())
Như đã thảo luận, cách tốt nhất để kết xuất mảng vào tệp CSV là sử dụng .savetxt(...)
phương thức. Tuy nhiên, có một số điều chúng ta nên biết để làm điều đó đúng.
Ví dụ, nếu bạn có một mảng NumPy với dtype = np.int32
như
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
và muốn lưu bằng cách sử dụng savetxt
như
np.savetxt('values.csv', narr, delimiter=",")
Nó sẽ lưu trữ dữ liệu ở định dạng hàm mũ theo dấu phẩy động như
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
Bạn sẽ phải thay đổi định dạng bằng cách sử dụng tham số có tên fmt
là
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
lưu trữ dữ liệu ở định dạng ban đầu
Ngoài ra, savetxt
có thể được sử dụng để lưu trữ dữ liệu ở .gz
định dạng nén có thể hữu ích trong khi truyền dữ liệu qua mạng.
Chúng ta chỉ cần thay đổi phần mở rộng của tệp vì .gz
numpy sẽ tự động xử lý mọi thứ
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
Hy vọng nó giúp
fmt="%d"
là những gì tôi đang tìm kiếm. Cảm ơn bạn!
Tôi tin rằng bạn cũng có thể thực hiện điều này khá đơn giản như sau:
ví dụ # 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
ví dụ # 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
nếu bạn muốn viết vào cột:
for x in np.nditer(a.T, order='C'):
file.write(str(x))
file.write("\n")
Ở đây 'a' là tên của mảng numpy và 'file' là biến để ghi trong tệp.
Nếu bạn muốn viết liên tiếp:
writer= csv.writer(file, delimiter=',')
for x in np.nditer(a.T, order='C'):
row.append(str(x))
writer.writerow(row)
Nếu bạn muốn lưu mảng numpy của mình (ví dụ your_array = np.array([[1,2],[3,4]])
) vào một ô, bạn có thể chuyển đổi nó trước bằngyour_array.tolist()
.
Sau đó lưu nó theo cách thông thường vào một ô, delimiter=';'
và ô trong tệp csv sẽ trông như thế này[[1, 2], [2, 4]]
Sau đó, bạn có thể khôi phục mảng của bạn như thế này:
your_array = np.array(ast.literal_eval(cell_string))
Bạn cũng có thể làm điều đó với python thuần mà không cần sử dụng bất kỳ mô-đun nào.
# 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)
Trong Python, chúng tôi sử dụng mô-đun csv.writer () để ghi dữ liệu vào các tệp csv. Mô-đun này tương tự như mô-đun 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()
Một dấu phân cách là một chuỗi được sử dụng để phân tách các trường. Giá trị mặc định là dấu phẩy (,).