Khi làm việc với DataFrames của gấu trúc, đôi khi có thể có lợi nếu chúng ta chuyển đổi chúng thành mảng NumPy. Cái sau dường như hiệu quả hơn về bộ nhớ, đặc biệt là khi thực hiện một số phép toán phức tạp trên dữ liệu
Điều này đặc biệt đúng khi bạn làm việc với lượng dữ liệu tương đối nhỏ (giả sử 50 nghìn hàng trở xuống). Pandas thường sẽ vượt trội hơn ndarrays trong các trường hợp liên quan đến khối lượng dữ liệu lớn hơn đáng kể (giả sử> 500 nghìn hàng). Tuy nhiên, đây chỉ là một quy tắc chung — trong hầu hết các trường hợp, sẽ tốt hơn nếu kiểm tra cả hai tùy chọn và xem tùy chọn nào tốt hơn về hiệu suất và mức sử dụng bộ nhớ, dựa trên các yêu cầu và trường hợp sử dụng cụ thể của bạn
Trong hướng dẫn ngắn ngày hôm nay, chúng tôi sẽ giới thiệu cách chuyển đổi DataFrame của pandas thành mảng NumPy một cách hiệu quả
Trước tiên, hãy tạo một DataFrame gấu trúc mẫu mà chúng ta sẽ sử dụng để minh họa một số cách khác nhau có thể được sử dụng để chuyển đổi nó thành mảng có nhiều mảng
import pandas as pddf = pd.DataFrame(
[
(1, 'A', 10.5, True),
(2, 'B', 10.0, False),
(3, 'A', 19.2, False),
(4, 'C', 21.1, True),
(5, 'A', 15.5, True),
(6, 'C', 14.9, False),
(7, 'C', 13.1, True),
(8, 'B', 12.5, False),
(9, 'C', 11.2, False),
(10, 'A', 31.4, False),
(11, 'D', 10.4, True),
],
columns=['colA', 'colB', 'colC', 'colD']
)print(df)
colA colB colC colD
0 1 A 10.5 True
1 2 B 10.0 False
2 3 A 19.2 False
3 4 C 21.1 True
4 5 A 15.5 True
5 6 C 14.9 False
6 7 C 13.1 True
7 8 B 12.5 False
8 9 C 11.2 False
9 10 A 31.4 False
10 11 D 10.4 True
Sử dụng gấu trúc. Khung dữ liệu. to_numpy()
Tùy chọn đầu tiên chúng tôi có khi chuyển đổi DataFrame của gấu trúc thành mảng NumPy là phương thức >>> type(ndarray)
<class 'numpy.ndarray'>0
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)
Và loại đối tượng trả về sẽ là >>> type(ndarray)
<class 'numpy.ndarray'>1
<class 'numpy.ndarray'>
Sử dụng gấu trúc. Khung dữ liệu. to_records()
Một tùy chọn khác ở đây là phương pháp >>> type(ndarray)
<class 'numpy.ndarray'>2 sẽ chuyển đổi DataFrame của gấu trúc thành một mảng bản ghi NumPy
( 1, 2, 'B', 10. , False),
( 2, 3, 'A', 19.2, False),
( 3, 4, 'C', 21.1, True),
( 4, 5, 'A', 15.5, True),
( 5, 6, 'C', 14.9, False),
( 6, 7, 'C', 13.1, True),
( 7, 8, 'B', 12.5, False),
( 8, 9, 'C', 11.2, False),
( 9, 10, 'A', 31.4, False),
(10, 11, 'D', 10.4, True)],
dtype=[('index', '<i8'), ('colA', '<i8'), ('colB', 'O'), ('colC', '<f8'), ('colD', '?')])
Như đã đề cập, trái ngược với ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)0, phương thức ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)1 sẽ trả về một đối tượng kiểu ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)2
<class 'numpy.recarray'>
sử dụng numpy. sự lộn xộn()
Tùy chọn thứ ba mà chúng tôi có ở đây là phương pháp ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)3 sẽ chuyển đổi DataFrame của gấu trúc đầu vào thành một mảng NumPy
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)
Đối tượng trả về một lần nữa sẽ là một thể hiện của >>> type(ndarray)
<class 'numpy.ndarray'>1
<class 'numpy.ndarray'>
Tránh sử dụng df. giá trị
Trong các phiên bản gấu trúc cũ hơn, một cách khác để chuyển đổi DataFrame của gấu trúc thành mảng NumPy là thông qua thuộc tính ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)5. Tuy nhiên, xin lưu ý rằng ngay cả tài liệu chính thức cũng khuyến khích bạn không sử dụng nó nữa
Chúng tôi khuyên bạn nên sử dụng ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)6 để thay thế
Điều này là do hành vi của thuộc tính này không nhất quán. Để tìm hiểu thêm chi tiết, bạn có thể đọc ghi chú phát hành của phiên bản 0. 24. 0
Trước đây, điều này sẽ được thực hiện với ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)7, nhưng với ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)8 thì không rõ liệu giá trị được trả về sẽ là mảng thực, một số phép biến đổi của nó hay một trong các mảng tùy chỉnh của gấu trúc (như ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)9)
Suy nghĩ cuối cùng
Trong bài viết hôm nay, chúng ta đã thảo luận về việc chuyển đổi DataFrames của pandas thành mảng NumPy và trong những trường hợp nào thì có thể có lợi khi làm như vậy
Ngoài ra, chúng tôi đã giới thiệu cách chuyển đổi DataFrame thành ndarray bằng cách sử dụng các phương thức ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)0 và ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)1 của đối tượng >>> type(ndarray)
<class 'numpy.ndarray'>2 cũng như phương thức >>> type(ndarray)
<class 'numpy.ndarray'>3
Trở thành thành viên và đọc mọi câu chuyện trên Medium. Phí thành viên của bạn hỗ trợ trực tiếp cho tôi và các nhà văn khác mà bạn đọc. Bạn cũng sẽ có toàn quyền truy cập vào mọi câu chuyện trên Phương tiện