Trong Chương 2, chúng ta đã xem xét chi tiết các phương thức và công cụ để truy cập, thiết lập và sửa đổi các giá trị trong mảng NumPy. Chúng bao gồm lập chỉ mục [e. g. ,
True9], cắt lát [e. g. ,
data.keys[]0], che dấu [e. g. ,
data.keys[]1], lập chỉ mục ưa thích [e. g. ,
data.keys[]2], và sự kết hợp của chúng [e. g. ,
data.keys[]3]. Ở đây chúng ta sẽ xem xét các phương tiện tương tự để truy cập và sửa đổi các giá trị trong các đối tượng
data.keys[]4 và
data.keys[]5 của Pandas. Nếu bạn đã sử dụng các mẫu NumPy, các mẫu tương ứng trong Pandas sẽ cảm thấy rất quen thuộc, mặc dù có một số điều kỳ quặc cần lưu ý
Chúng ta sẽ bắt đầu với trường hợp đơn giản của đối tượng
data.keys[]4 một chiều, sau đó chuyển sang đối tượng
data.keys[]5 hai chiều phức tạp hơn
Lựa chọn dữ liệu theo chuỗi¶
Như chúng ta đã thấy trong phần trước, một đối tượng
data.keys[]4 hoạt động theo nhiều cách giống như một mảng NumPy một chiều và theo nhiều cách giống như một từ điển Python tiêu chuẩn. Nếu chúng ta ghi nhớ hai phép loại suy chồng chéo này, nó sẽ giúp chúng ta hiểu các kiểu lập chỉ mục và lựa chọn dữ liệu trong các mảng này
Sê-ri dưới dạng từ điển¶
Giống như một từ điển, đối tượng
data.keys[]4 cung cấp ánh xạ từ tập hợp các khóa tới tập hợp các giá trị
Trong 1]
data.keys[]1
Ra[1]
data.keys[]2
Trong 2]
data.keys[]3
Ra[2]
data.keys[]4
Chúng ta cũng có thể sử dụng các biểu thức và phương thức Python giống như từ điển để kiểm tra các khóa/chỉ mục và giá trị
Trong 3]
data.keys[]5
Ra[3]
True
Trong [4]
data.keys[]
Ra[4]
data.keys[]8
Trong [5]
data.keys[]9
Ra[5]
data.keys[]0
Các đối tượng
data.keys[]4 thậm chí có thể được sửa đổi bằng cú pháp giống như từ điển. Giống như bạn có thể mở rộng một từ điển bằng cách gán cho một khóa mới, bạn có thể mở rộng một
data.keys[]4 bằng cách gán cho một giá trị chỉ mục mới
Trong [6]
data.keys[]20
Ra[6]
data.keys[]21
Khả năng thay đổi dễ dàng này của các đối tượng là một tính năng thuận tiện. dưới vỏ bọc, Pandas đang đưa ra quyết định về cách bố trí bộ nhớ và sao chép dữ liệu có thể cần phải thực hiện;
Chuỗi dưới dạng mảng một chiều¶
Một
data.keys[]4 xây dựng trên giao diện giống như từ điển này và cung cấp lựa chọn mục kiểu mảng thông qua các cơ chế cơ bản giống như mảng NumPy – đó là, lát, tạo mặt nạ và lập chỉ mục ưa thích. Ví dụ về những điều này như sau
Trong [7]
data.keys[]22
Ra[7]
data.keys[]23
Trong [8]
data.keys[]24
Ra[8]
data.keys[]25
Trong [9]
data.keys[]26
Ra[9]
data.keys[]27
Trong [10]
data.keys[]28
Ra[10]
data.keys[]29
Trong số này, cắt lát có thể là nguồn gốc của sự nhầm lẫn nhất. Lưu ý rằng khi cắt với một chỉ số rõ ràng [i. e. ,
data.keys[]83], chỉ mục cuối cùng được bao gồm trong lát cắt, trong khi khi cắt lát với chỉ mục ẩn [i. e. ,
data.keys[]84], chỉ mục cuối cùng bị loại khỏi lát cắt
Người lập chỉ mục. loc, iloc và ix¶
Các quy ước cắt và lập chỉ mục này có thể là một nguồn gây nhầm lẫn. Ví dụ: nếu
data.keys[]4 của bạn có chỉ mục số nguyên rõ ràng, thao tác lập chỉ mục như
data.keys[]86 sẽ sử dụng chỉ mục rõ ràng, trong khi thao tác cắt lát như
data.keys[]87 sẽ sử dụng chỉ mục kiểu Python ẩn
Trong [11]
data.keys[]30
Ra[11]
data.keys[]31
Trong [12]
data.keys[]32
Ra[12]
data.keys[]33
Trong [13]
data.keys[]34
Ra[13]
data.keys[]35
Do sự nhầm lẫn tiềm ẩn này trong trường hợp các chỉ mục số nguyên, Pandas cung cấp một số thuộc tính chỉ mục đặc biệt hiển thị rõ ràng các lược đồ lập chỉ mục nhất định. Đây không phải là các phương thức chức năng, mà là các thuộc tính hiển thị một giao diện cắt cụ thể cho dữ liệu trong
data.keys[]4
Đầu tiên, thuộc tính
data.keys[]89 cho phép lập chỉ mục và cắt luôn tham chiếu chỉ mục rõ ràng
Trong [14]
data.keys[]36
Ra[14]
data.keys[]33
Trong [15]
data.keys[]38
Ra[15]
data.keys[]39
Thuộc tính
data.keys[]90 cho phép lập chỉ mục và cắt luôn tham chiếu chỉ mục kiểu Python ẩn
Trong [16]
data.keys[]40
Ra[16]
data.keys[]41
Trong [17]
data.keys[]42
Ra[17]
data.keys[]35
Thuộc tính lập chỉ mục thứ ba,
data.keys[]91, là sự kết hợp của cả hai và đối với các đối tượng
data.keys[]4 tương đương với việc lập chỉ mục dựa trên
data.keys[]93 tiêu chuẩn. Mục đích của bộ chỉ mục
data.keys[]91 sẽ trở nên rõ ràng hơn trong ngữ cảnh của các đối tượng
data.keys[]5, mà chúng ta sẽ thảo luận sau
Một nguyên tắc hướng dẫn của mã Python là "rõ ràng là tốt hơn ngầm. " Bản chất rõ ràng của
data.keys[]89 và
data.keys[]90 làm cho chúng rất hữu ích trong việc duy trì mã rõ ràng và dễ đọc; đặc biệt trong trường hợp chỉ mục số nguyên, tôi khuyên bạn nên sử dụng cả hai để làm cho mã dễ đọc và dễ hiểu hơn, đồng thời ngăn các lỗi tinh vi do hỗn hợp
Lựa chọn dữ liệu trong DataFrame¶
Nhớ lại rằng một
data.keys[]5 hoạt động theo nhiều cách giống như một mảng hai chiều hoặc có cấu trúc và theo những cách khác giống như một từ điển gồm các cấu trúc
data.keys[]4 chia sẻ cùng một chỉ mục. Những phép loại suy này có thể hữu ích để ghi nhớ khi chúng ta khám phá lựa chọn dữ liệu trong cấu trúc này
DataFrame dưới dạng từ điển¶
Phép loại suy đầu tiên mà chúng ta sẽ xem xét là
data.keys[]5 như một từ điển của các đối tượng liên quan đến
data.keys[]4. Hãy quay lại ví dụ của chúng ta về diện tích và dân số của các bang
Trong [18]
data.keys[]44
Hết[18]
areapopCalifornia42396738332521Florida17031219552860Illinois14999512882135New York14129719651127Texas69566226448193
Có thể truy cập
data.keys[]4 riêng lẻ tạo nên các cột của
data.keys[]5 thông qua lập chỉ mục kiểu từ điển của tên cột
Trong 19]
data.keys[]45
Hết[19]
data.keys[]46
Tương tự, chúng ta có thể sử dụng quyền truy cập kiểu thuộc tính với tên cột là chuỗi
Trong 20]
data.keys[]47
Hết[20]
data.keys[]46
Truy cập cột kiểu thuộc tính này thực sự truy cập vào cùng một đối tượng như truy cập kiểu từ điển
Trong [21]
data.keys[]49
Hết[21]
True
Mặc dù đây là cách viết tắt hữu ích, hãy nhớ rằng nó không hoạt động trong mọi trường hợp. Ví dụ: nếu tên cột không phải là chuỗi hoặc nếu tên cột xung đột với các phương thức của
data.keys[]5, thì không thể truy cập kiểu thuộc tính này. Ví dụ:
data.keys[]5 có phương thức
data.keys[]06, vì vậy
data.keys[]07 sẽ trỏ đến cột này thay vì cột
data.keys[]08
Trong [22]
data.keys[]51
Hết[22]
data.keys[]52
Cụ thể, bạn nên tránh bị cám dỗ thử gán cột thông qua thuộc tính [i. e. , sử dụng
data.keys[]09 thay vì
data.keys[]200]
Giống như đối tượng
data.keys[]4 đã thảo luận trước đó, cú pháp kiểu từ điển này cũng có thể được sử dụng để sửa đổi đối tượng, trong trường hợp này là thêm một cột mới
Trong [23]
data.keys[]53
Hết[23]
khu vực mật độ dân sốCalifornia4239673833252190. 413926Florida17031219552860114. 806121Illinois1499951288213585. 883763New York14129719651127139. 076746Texas6956622644819338. 018740
Phần này hiển thị bản xem trước của cú pháp đơn giản của số học theo từng phần tử giữa các đối tượng
data.keys[]4;
DataFrame dưới dạng mảng hai chiều¶
Như đã đề cập trước đây, chúng ta cũng có thể xem
data.keys[]5 dưới dạng mảng hai chiều nâng cao. Chúng ta có thể kiểm tra mảng dữ liệu cơ bản thô bằng cách sử dụng thuộc tính
data.keys[]204
Trong [24]
data.keys[]54
Ra[24]
data.keys[]55
Với hình ảnh này, nhiều quan sát giống như mảng quen thuộc có thể được thực hiện trên chính
data.keys[]5. Ví dụ: chúng ta có thể chuyển đổi toàn bộ
data.keys[]5 để hoán đổi hàng và cột
Trong [25]
data.keys[]56
Hết[25]
CaliforniaFloridaIllinoisNew YorkTexasarea4. 239670e+051. 703120e+051. 499950e+051. 412970e+056. 956620e+05pop3. 833252e+071. 955286e+071. 288214e+071. 965113e+072. 644819e+07mật độ9. 041393e+011. 148061e+028. 588376e+011. 390767e+023. 801874e+01
Tuy nhiên, khi nói đến việc lập chỉ mục cho các đối tượng
data.keys[]5, rõ ràng là việc lập chỉ mục theo kiểu từ điển của các cột ngăn cản khả năng của chúng ta đơn giản coi nó là một mảng NumPy. Cụ thể, việc chuyển một chỉ mục cho một mảng sẽ truy cập một hàng
Trong [26]
data.keys[]57
Hết[26]
data.keys[]58
và chuyển một "chỉ mục" duy nhất tới một
data.keys[]5 để truy cập một cột
Trong [27]
data.keys[]45
Hết[27]
data.keys[]46
Vì vậy, để lập chỉ mục kiểu mảng, chúng ta cần một quy ước khác. Ở đây, Pandas lại sử dụng các bộ chỉ mục
data.keys[]89,
data.keys[]90 và
data.keys[]91 đã đề cập trước đó. Sử dụng bộ chỉ mục
data.keys[]90, chúng ta có thể lập chỉ mục mảng bên dưới như thể nó là một mảng NumPy đơn giản [sử dụng chỉ mục kiểu Python ẩn], nhưng các nhãn cột và chỉ mục
data.keys[]5 vẫn được duy trì trong kết quả
Trong [28]
True1
Hết[28]
areapopCalifornia42396738332521Florida17031219552860Illinois14999512882135
Tương tự, sử dụng bộ chỉ mục
data.keys[]89, chúng ta có thể lập chỉ mục dữ liệu cơ bản theo kiểu giống như mảng nhưng sử dụng tên cột và chỉ mục rõ ràng
Trong [29]
True2
Hết[29]
areapopCalifornia42396738332521Florida17031219552860Illinois14999512882135
Bộ chỉ mục
data.keys[]91 cho phép kết hợp hai cách tiếp cận này
Trong [30]
True3
Ra[30]
areapopCalifornia42396738332521Florida17031219552860Illinois14999512882135
Hãy nhớ rằng đối với các chỉ mục số nguyên, bộ chỉ mục
data.keys[]91 có thể có cùng nguồn gây nhầm lẫn như đã thảo luận đối với các đối tượng
data.keys[]4 được lập chỉ mục số nguyên
Bất kỳ mẫu truy cập dữ liệu kiểu NumPy quen thuộc nào cũng có thể được sử dụng trong các bộ chỉ mục này. Ví dụ: trong trình chỉ mục
data.keys[]89, chúng ta có thể kết hợp lập chỉ mục mặt nạ và ưa thích như sau
Trong [31]
True4
Ra[31]
mật độ dân sốFlorida19552860114. 806121New York19651127139. 076746
Bất kỳ quy ước lập chỉ mục nào cũng có thể được sử dụng để đặt hoặc sửa đổi các giá trị;
Trong [32]
True5
Ra[32]
khu vực mật độ dân sốCalifornia4239673833252190. 000000Florida17031219552860114. 806121Illinois1499951288213585. 883763New York14129719651127139. 076746Texas6956622644819338. 018740
Để xây dựng sự thông thạo của bạn trong thao tác dữ liệu Pandas, tôi khuyên bạn nên dành chút thời gian với một
data.keys[]5 đơn giản và khám phá các kiểu lập chỉ mục, cắt, tạo mặt nạ và lập chỉ mục ưa thích được cho phép bởi các phương pháp lập chỉ mục khác nhau này
Các quy ước lập chỉ mục bổ sung¶
Có một vài quy ước lập chỉ mục bổ sung có vẻ mâu thuẫn với các cuộc thảo luận trước đó, tuy nhiên có thể rất hữu ích trong thực tế. Đầu tiên, trong khi lập chỉ mục đề cập đến các cột, cắt lát đề cập đến các hàng
Trong [33]
True6
Ra[33]
khu vực mật độ dân sốFlorida17031219552860114. 806121Illinois1499951288213585. 883763
Các lát như vậy cũng có thể đề cập đến các hàng theo số thay vì theo chỉ mục
Trong [34]
True7
Ra[34]
khu vực mật độ dân sốFlorida17031219552860114. 806121Illinois1499951288213585. 883763
Tương tự, các hoạt động tạo mặt nạ trực tiếp cũng được diễn giải theo hàng hơn là theo cột
Trong [35]
True8
Ra[35]
khu vực mật độ dân sốFlorida17031219552860114. 806121New York14129719651127139. 076746
Hai quy ước này tương tự về mặt cú pháp với các quy ước trên mảng NumPy và mặc dù chúng có thể không khớp chính xác với khuôn mẫu của các quy ước Pandas, nhưng chúng vẫn khá hữu ích trong thực tế