Nhập/Xuất với NumPy
NumPy cung cấp một số hàm để tạo mảng từ dữ liệu dạng bảng. genfromtxt là hàm tổng quát nhất, có khả năng xử lý các giá trị thiếu và các vấn đề phức tạp khác.
Định nghĩa đầu vào
Phần tiêu đề “Định nghĩa đầu vào”Đối số bắt buộc duy nhất của genfromtxt là nguồn dữ liệu. Nó có thể là một chuỗi, một danh sách các chuỗi, một trình tạo (generator) hoặc một đối tượng giống tệp đã mở.
Chia các dòng thành các cột
Phần tiêu đề “Chia các dòng thành các cột”Đối số delimiter
Phần tiêu đề “Đối số delimiter”Khi tệp được xác định và mở để đọc, genfromtxt sẽ chia mỗi dòng không trống thành một chuỗi các xâu ký tự.
from io import StringIOimport numpy as np
data = "1, 2, 3\n4, 5, 6"np.genfromtxt(StringIO(data), delimiter=",")# array([[1., 2., 3.],# [4., 5., 6.]])Đối số autostrip
Phần tiêu đề “Đối số autostrip”Theo mặc định, khi một dòng được phân tách thành một loạt các xâu ký tự, các mục riêng lẻ không được loại bỏ các khoảng trắng ở đầu hoặc cuối. Hành vi này có thể được thay đổi bằng cách đặt đối số tùy chọn autostrip thành True.
data = "1, abc , 2\n 3, xxx, 4"np.genfromtxt(StringIO(data), delimiter=",", dtype="|U5", autostrip=True)# array([['1', 'abc', '2'],# ['3', 'xxx', '4']], dtype='<U5')Đối số comments
Phần tiêu đề “Đối số comments”Đối số tùy chọn comments được sử dụng để định nghĩa một chuỗi ký tự đánh dấu sự bắt đầu của một chú thích. Theo mặc định, genfromtxt giả định comments='#'.
data = """# Bỏ qua tôi !1, 23, 45, 6 #Đây là dòng thứ ba7, 8# Và đây là dòng cuối cùng9, 0"""np.genfromtxt(StringIO(data), comments="#", delimiter=",")# array([[1., 2.],# [3., 4.],# [5., 6.],# [7., 8.],# [9., 0.]])Chọn kiểu dữ liệu
Phần tiêu đề “Chọn kiểu dữ liệu”Cách chính để kiểm soát cách các chuỗi ký tự chúng ta đọc được từ tệp được chuyển đổi sang các kiểu khác là đặt đối số dtype.
dtype=float(mặc định)dtype=(int, float, float)dtype="i4,f8,|U3"dtype=None: kiểu được xác định từ dữ liệu
data = "1, 2, 3\n4, 5, 6"np.genfromtxt(StringIO(data), delimiter=",", dtype=int)Tinh chỉnh quá trình chuyển đổi
Phần tiêu đề “Tinh chỉnh quá trình chuyển đổi”missing_values
Phần tiêu đề “missing_values”Theo mặc định, bất kỳ chuỗi trống nào cũng được đánh dấu là bị thiếu. Chúng ta cũng có thể xem xét các chuỗi phức tạp hơn, chẳng hạn như “N/A” hoặc “???” để đại diện cho dữ liệu bị thiếu hoặc không hợp lệ.
filling_values
Phần tiêu đề “filling_values”Chúng ta biết cách nhận biết dữ liệu bị thiếu, nhưng vẫn cần cung cấp một giá trị cho các mục nhập bị thiếu này.
data = "N/A, 2, 3\n4, ,???"kwargs = dict(delimiter=",", dtype=int, names="a,b,c", missing_values={0:"N/A", 'b':" ", 2:"???"}, filling_values={0:0, 'b':0, 2:-999})np.genfromtxt(StringIO(data), **kwargs)# array([(0, 2, 3), (4, 0, -999)],# dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])