Nhập dữ liệu với genfromtxt
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
Đố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
Đố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 StringIO
import 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
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
Đố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, 2
3, 4
5, 6 #Đây là dòng thứ ba
7, 8
# Và đây là dòng cuối cùng
9, 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
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
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
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')])
Python