Ở cấp độ rất cơ bản, các đối tượng Pandas có thể được coi là phiên bản nâng cao của mảng có cấu trúc NumPy trong đó các hàng và cột được xác định bằng nhãn thay vì chỉ số nguyên đơn giản. Như chúng ta sẽ thấy trong suốt chương này, Pandas cung cấp một loạt các công cụ, phương pháp và chức năng hữu ích trên các cấu trúc dữ liệu cơ bản, nhưng gần như mọi thứ tiếp theo sẽ yêu cầu hiểu biết về những cấu trúc này là gì. Vì vậy, trước khi chúng ta đi xa hơn, hãy giới thiệu ba cấu trúc dữ liệu Pandas cơ bản này. các RangeIndex(start=0, stop=4, step=1)8, RangeIndex(start=0, stop=4, step=1)9, và data[1]0 Show
Chúng tôi sẽ bắt đầu các phiên mã của mình với các lần nhập NumPy và Pandas tiêu chuẩn Trong 1] import numpy as np import pandas as pd Đối tượng sê-ri Pandas¶Pandas RangeIndex(start=0, stop=4, step=1)8 là một mảng dữ liệu được lập chỉ mục một chiều. Nó có thể được tạo từ một danh sách hoặc mảng như sau Trong 2] data = pd.Series([0.25, 0.5, 0.75, 1.0]) data Ra[2] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float64 Như chúng ta thấy ở đầu ra, RangeIndex(start=0, stop=4, step=1)8 bao bọc cả một chuỗi các giá trị và một chuỗi các chỉ số mà chúng ta có thể truy cập bằng các thuộc tính data[1]3 và data[1]4. data[1]3 chỉ đơn giản là một mảng NumPy quen thuộc Trong 3] RangeIndex(start=0, stop=4, step=1)1 Ra[3] RangeIndex(start=0, stop=4, step=1)2 data[1]4 là một đối tượng giống như mảng của loại data[1]7, mà chúng ta sẽ thảo luận chi tiết hơn trong giây lát Trong [4] RangeIndex(start=0, stop=4, step=1)5 Ra[4] RangeIndex(start=0, stop=4, step=1) Giống như với một mảng NumPy, dữ liệu có thể được truy cập bằng chỉ mục được liên kết thông qua ký hiệu dấu ngoặc vuông Python quen thuộc Trong [5] data[1] Ra[5] RangeIndex(start=0, stop=4, step=1)8 Trong [6] RangeIndex(start=0, stop=4, step=1)9 Ra[6] data = pd.Series([0.25, 0.5, 0.75, 1.0]) data0 Tuy nhiên, như chúng ta sẽ thấy, Pandas RangeIndex(start=0, stop=4, step=1)8 tổng quát và linh hoạt hơn nhiều so với mảng NumPy một chiều mà nó mô phỏng RangeIndex(start=0, stop=4, step=1)8 dưới dạng mảng NumPy tổng quát¶Từ những gì chúng ta đã thấy cho đến nay, có vẻ như đối tượng RangeIndex(start=0, stop=4, step=1)8 về cơ bản có thể hoán đổi cho nhau với mảng NumPy một chiều. Sự khác biệt cơ bản là sự hiện diện của chỉ số. trong khi Mảng Numpy có chỉ mục số nguyên được xác định ngầm được sử dụng để truy cập các giá trị, thì Pandas RangeIndex(start=0, stop=4, step=1)8 có chỉ mục được xác định rõ ràng được liên kết với các giá trị Định nghĩa chỉ mục rõ ràng này cung cấp cho đối tượng RangeIndex(start=0, stop=4, step=1)8 các khả năng bổ sung. Ví dụ: chỉ mục không nhất thiết phải là số nguyên nhưng có thể bao gồm các giá trị thuộc bất kỳ loại mong muốn nào. Ví dụ: nếu muốn, chúng ta có thể sử dụng chuỗi làm chỉ mục Trong [7] data = pd.Series([0.25, 0.5, 0.75, 1.0]) data1 Ra[7] data = pd.Series([0.25, 0.5, 0.75, 1.0]) data2 Và quyền truy cập mục hoạt động như mong đợi Trong [8] data = pd.Series([0.25, 0.5, 0.75, 1.0]) data3 Ra[8] RangeIndex(start=0, stop=4, step=1)8 Chúng tôi thậm chí có thể sử dụng các chỉ số không liền kề hoặc không tuần tự Trong [9] data = pd.Series([0.25, 0.5, 0.75, 1.0]) data5 Ra[9] data = pd.Series([0.25, 0.5, 0.75, 1.0]) data6 Trong [10] data = pd.Series([0.25, 0.5, 0.75, 1.0]) data7 Ra[10] RangeIndex(start=0, stop=4, step=1)8 Series như từ điển chuyên ngành¶Theo cách này, bạn có thể nghĩ về một RangeIndex(start=0, stop=4, step=1)8 của Pandas giống như một chuyên ngành của từ điển Python. Từ điển là cấu trúc ánh xạ các khóa tùy ý thành một tập hợp các giá trị tùy ý và RangeIndex(start=0, stop=4, step=1)8 là cấu trúc ánh xạ các khóa đã nhập thành một tập hợp các giá trị đã nhập. Việc gõ này rất quan trọng. giống như mã được biên dịch theo loại cụ thể đằng sau một mảng NumPy làm cho nó hiệu quả hơn danh sách Python cho một số thao tác nhất định, thông tin loại của Pandas RangeIndex(start=0, stop=4, step=1)8 làm cho nó hiệu quả hơn nhiều so với từ điển Python cho một số thao tác nhất định Sự tương tự của từ điển RangeIndex(start=0, stop=4, step=1)8 thậm chí có thể được làm rõ hơn bằng cách xây dựng một đối tượng RangeIndex(start=0, stop=4, step=1)8 trực tiếp từ một từ điển Python Trong [11] data = pd.Series([0.25, 0.5, 0.75, 1.0]) data9 Ra[11] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float640 Theo mặc định, một RangeIndex(start=0, stop=4, step=1)8 sẽ được tạo khi chỉ mục được rút ra từ các khóa được sắp xếp. Từ đây, có thể thực hiện truy cập mục kiểu từ điển điển hình Trong [12] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float641 Ra[12] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float642 Tuy nhiên, không giống như từ điển, RangeIndex(start=0, stop=4, step=1)8 cũng hỗ trợ các thao tác kiểu mảng chẳng hạn như cắt Trong [13] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float643 Ra[13] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float644 Chúng ta sẽ thảo luận về một số điều kỳ quặc của việc lập chỉ mục và cắt Pandas trong Lựa chọn và lập chỉ mục dữ liệu Xây dựng đối tượng Series¶Chúng ta đã thấy một số cách xây dựng Pandas RangeIndex(start=0, stop=4, step=1)8 từ đầu; 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float645 trong đó data[1]4 là một đối số tùy chọn và RangeIndex(start=0, stop=4, step=1)92 có thể là một trong nhiều thực thể Ví dụ: RangeIndex(start=0, stop=4, step=1)92 có thể là một danh sách hoặc mảng NumPy, trong trường hợp đó, data[1]4 mặc định là một chuỗi số nguyên Trong [14] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float646 Ra[14] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float647 RangeIndex(start=0, stop=4, step=1)92 có thể là vô hướng, được lặp lại để điền vào chỉ mục đã chỉ định Trong [15] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float648 Ra[15] 0 0.25 1 0.50 2 0.75 3 1.00 dtype: float649 RangeIndex(start=0, stop=4, step=1)92 có thể là một từ điển, trong đó data[1]4 mặc định là các khóa từ điển đã sắp xếp Trong [16] RangeIndex(start=0, stop=4, step=1)10 Ra[16] RangeIndex(start=0, stop=4, step=1)11 Trong mỗi trường hợp, chỉ mục có thể được đặt rõ ràng nếu ưu tiên một kết quả khác Trong [17] RangeIndex(start=0, stop=4, step=1)12 Ra[17] RangeIndex(start=0, stop=4, step=1)13 Lưu ý rằng trong trường hợp này, RangeIndex(start=0, stop=4, step=1)8 chỉ được điền bằng các khóa được xác định rõ ràng Đối tượng khung dữ liệu Pandas¶Cấu trúc cơ bản tiếp theo trong Pandas là RangeIndex(start=0, stop=4, step=1)9. Giống như đối tượng RangeIndex(start=0, stop=4, step=1)8 đã thảo luận trong phần trước, RangeIndex(start=0, stop=4, step=1)9 có thể được coi là dạng tổng quát hóa của mảng NumPy hoặc dạng đặc biệt hóa của từ điển Python. Bây giờ chúng ta sẽ xem xét từng quan điểm này DataFrame dưới dạng mảng NumPy tổng quát¶Nếu một RangeIndex(start=0, stop=4, step=1)8 là một dạng tương tự của mảng một chiều với các chỉ số linh hoạt, thì một RangeIndex(start=0, stop=4, step=1)9 là một dạng tương tự của một mảng hai chiều với cả chỉ số hàng linh hoạt và tên cột linh hoạt. Giống như bạn có thể nghĩ về một mảng hai chiều như một chuỗi các cột một chiều được sắp xếp theo thứ tự, bạn có thể nghĩ về một RangeIndex(start=0, stop=4, step=1)9 như một chuỗi các đối tượng RangeIndex(start=0, stop=4, step=1)8 được căn chỉnh. Ở đây, "căn chỉnh" có nghĩa là chúng chia sẻ cùng một chỉ mục Để chứng minh điều này, trước tiên chúng ta hãy xây dựng một RangeIndex(start=0, stop=4, step=1)8 mới liệt kê diện tích của từng bang trong số 5 bang đã thảo luận trong phần trước Trong [18] RangeIndex(start=0, stop=4, step=1)14 Hết[18] RangeIndex(start=0, stop=4, step=1)15 Bây giờ chúng ta có cái này cùng với Sê-ri data = pd.Series([0.25, 0.5, 0.75, 1.0]) data07 từ trước, chúng ta có thể sử dụng từ điển để xây dựng một đối tượng hai chiều duy nhất chứa thông tin này Trong 19] RangeIndex(start=0, stop=4, step=1)16 Hết[19] khu vựcdân sốCalifornia42396738332521Florida17031219552860Illinois14999512882135New York14129719651127Texas69566226448193 Giống như đối tượng RangeIndex(start=0, stop=4, step=1)8, RangeIndex(start=0, stop=4, step=1)9 có thuộc tính data[1]4 cho phép truy cập vào nhãn chỉ mục Trong 20] RangeIndex(start=0, stop=4, step=1)17 Hết[20] RangeIndex(start=0, stop=4, step=1)18 Ngoài ra, RangeIndex(start=0, stop=4, step=1)9 có thuộc tính data = pd.Series([0.25, 0.5, 0.75, 1.0]) data12, là đối tượng data[1]0 giữ nhãn cột Trong [21] RangeIndex(start=0, stop=4, step=1)19 Hết[21] RangeIndex(start=0, stop=4, step=1)20 Do đó, RangeIndex(start=0, stop=4, step=1)9 có thể được coi là tổng quát hóa của mảng NumPy hai chiều, trong đó cả hàng và cột đều có chỉ mục tổng quát để truy cập dữ liệu DataFrame dưới dạng từ điển chuyên ngành¶Tương tự, chúng ta cũng có thể coi RangeIndex(start=0, stop=4, step=1)9 là một chuyên ngành của từ điển. Trong trường hợp một từ điển ánh xạ một khóa tới một giá trị, một RangeIndex(start=0, stop=4, step=1)9 ánh xạ một tên cột tới một RangeIndex(start=0, stop=4, step=1)8 dữ liệu cột. Ví dụ: yêu cầu thuộc tính data = pd.Series([0.25, 0.5, 0.75, 1.0]) data18 trả về đối tượng RangeIndex(start=0, stop=4, step=1)8 chứa các khu vực mà chúng ta đã thấy trước đó Trong [22] RangeIndex(start=0, stop=4, step=1)21 Hết[22] RangeIndex(start=0, stop=4, step=1)22 Lưu ý điểm có thể gây nhầm lẫn ở đây. trong mảng NumPy hai chiều, ________ 520 sẽ trả về hàng đầu tiên. Đối với một RangeIndex(start=0, stop=4, step=1)9, data = pd.Series([0.25, 0.5, 0.75, 1.0]) data22 sẽ trả về cột đầu tiên. Do đó, có lẽ tốt hơn nên nghĩ về các RangeIndex(start=0, stop=4, step=1)9 như những từ điển tổng quát hơn là các mảng tổng quát, mặc dù cả hai cách xem xét tình huống đều có thể hữu ích. Chúng ta sẽ khám phá các phương tiện lập chỉ mục linh hoạt hơn cho các RangeIndex(start=0, stop=4, step=1)9 trong Lựa chọn và lập chỉ mục dữ liệu Xây dựng các đối tượng DataFrame¶Pandas RangeIndex(start=0, stop=4, step=1)9 có thể được xây dựng theo nhiều cách khác nhau. Ở đây chúng tôi sẽ đưa ra một số ví dụ Từ một đối tượng Sê-ri đơn lẻ¶Một RangeIndex(start=0, stop=4, step=1)9 là một tập hợp của các đối tượng RangeIndex(start=0, stop=4, step=1)8 và một cột đơn RangeIndex(start=0, stop=4, step=1)9 có thể được tạo từ một RangeIndex(start=0, stop=4, step=1)8 đơn lẻ Trong [23] RangeIndex(start=0, stop=4, step=1)23 Hết[23] dân sốCalifornia38332521Florida19552860Illinois12882135New York19651127Texas26448193 Từ một danh sách các lệnh¶Bất kỳ danh sách từ điển nào cũng có thể được tạo thành một RangeIndex(start=0, stop=4, step=1)9. Chúng tôi sẽ sử dụng cách hiểu danh sách đơn giản để tạo một số dữ liệu Trong [24] RangeIndex(start=0, stop=4, step=1)24 Ra[24] ab000112224 Ngay cả khi một số khóa trong từ điển bị thiếu, Pandas sẽ điền chúng vào bằng data = pd.Series([0.25, 0.5, 0.75, 1.0]) data31 (i. e. , giá trị "không phải là số") Trong [25] RangeIndex(start=0, stop=4, step=1)25 Hết[25] abc01. 02NaN1NaN34. 0 Từ một từ điển các đối tượng Sê-ri¶Như chúng ta đã thấy trước đây, một RangeIndex(start=0, stop=4, step=1)9 cũng có thể được xây dựng từ một từ điển gồm các đối tượng RangeIndex(start=0, stop=4, step=1)8 Trong [26] RangeIndex(start=0, stop=4, step=1)26 Hết[26] khu vựcdân sốCalifornia42396738332521Florida17031219552860Illinois14999512882135New York14129719651127Texas69566226448193 Từ mảng NumPy hai chiều¶Với một mảng dữ liệu hai chiều, chúng ta có thể tạo một RangeIndex(start=0, stop=4, step=1)9 với bất kỳ tên chỉ mục và cột được chỉ định nào. Nếu bỏ qua, một chỉ mục số nguyên sẽ được sử dụng cho mỗi Trong [27] RangeIndex(start=0, stop=4, step=1)27 Hết[27] foobara0. 8652570. 213169b0. 4427590. 108267c0. 0471100. 905718 Từ một mảng có cấu trúc NumPy¶Chúng tôi đã đề cập đến các mảng có cấu trúc trong Dữ liệu có cấu trúc. Mảng có cấu trúc của NumPy. Pandas RangeIndex(start=0, stop=4, step=1)9 hoạt động giống như một mảng có cấu trúc và có thể được tạo trực tiếp từ một Trong [28] RangeIndex(start=0, stop=4, step=1)28 Hết[28] RangeIndex(start=0, stop=4, step=1)29 Trong [29] RangeIndex(start=0, stop=4, step=1)50 Hết[29] AB000. 0100. 0200. 0 Đối tượng chỉ mục Pandas¶Ở đây chúng ta đã thấy rằng cả hai đối tượng RangeIndex(start=0, stop=4, step=1)8 và RangeIndex(start=0, stop=4, step=1)9 đều chứa một chỉ mục rõ ràng cho phép bạn tham khảo và sửa đổi dữ liệu. Bản thân đối tượng data[1]0 này là một cấu trúc thú vị và nó có thể được coi là một mảng bất biến hoặc là một tập hợp có thứ tự (về mặt kỹ thuật là nhiều tập hợp, vì đối tượng data[1]0 có thể chứa các giá trị lặp lại). Những quan điểm đó có một số hậu quả thú vị trong các hoạt động có sẵn trên các đối tượng data[1]0. Ví dụ đơn giản, hãy xây dựng một data[1]0 từ danh sách các số nguyên Trong [30] RangeIndex(start=0, stop=4, step=1)51 Ra[30] RangeIndex(start=0, stop=4, step=1)52 Lập chỉ mục dưới dạng mảng bất biến¶data[1]0 theo nhiều cách hoạt động giống như một mảng. Ví dụ: chúng ta có thể sử dụng ký hiệu lập chỉ mục Python tiêu chuẩn để truy xuất các giá trị hoặc lát Trong [31] RangeIndex(start=0, stop=4, step=1)53 Ra[31] RangeIndex(start=0, stop=4, step=1)54 Trong [32] RangeIndex(start=0, stop=4, step=1)55 Ra[32] RangeIndex(start=0, stop=4, step=1)56 Các đối tượng data[1]0 cũng có nhiều thuộc tính quen thuộc từ mảng NumPy Trong [33] RangeIndex(start=0, stop=4, step=1)57 RangeIndex(start=0, stop=4, step=1)58 Một điểm khác biệt giữa các đối tượng data[1]0 và mảng NumPy là các chỉ số là bất biến – nghĩa là chúng không thể được sửa đổi thông qua các phương tiện thông thường Trong [34] RangeIndex(start=0, stop=4, step=1)59 RangeIndex(start=0, stop=4, step=1)0 Tính bất biến này giúp việc chia sẻ chỉ mục giữa nhiều RangeIndex(start=0, stop=4, step=1)9 và mảng an toàn hơn mà không có khả năng xảy ra tác dụng phụ do vô tình sửa đổi chỉ mục Lập chỉ mục theo thứ tự đã đặt¶Các đối tượng Pandas được thiết kế để tạo điều kiện thuận lợi cho các hoạt động như tham gia trên các bộ dữ liệu, phụ thuộc vào nhiều khía cạnh của số học tập hợp. Đối tượng data[1]0 tuân theo nhiều quy ước được sử dụng bởi cấu trúc dữ liệu data = pd.Series([0.25, 0.5, 0.75, 1.0]) data47 tích hợp sẵn của Python, để các phép hợp nhất, giao điểm, khác biệt và các kết hợp khác có thể được tính toán theo cách quen thuộc |