Giới thiệu
Gấu trúc có khả năng lựa chọn kép để chọn tập hợp con dữ liệu bằng cách sử dụng vị trí Chỉ mục hoặc bằng cách sử dụng nhãn Chỉ mục. Trong bài đăng này, tôi sẽ chỉ cho bạn cách "Chọn một tập hợp con dữ liệu bằng cách sử dụng phương pháp cắt từ điển".
Google có đầy đủ các bộ dữ liệu. Tìm kiếm bộ dữ liệu phim trên kaggle.com. Bài đăng này sử dụng tập dữ liệu phim từ kaggle.
Cách thực hiện
1. Nhập tập dữ liệu phim chỉ với các cột bắt buộc cho ví dụ này.
import pandas as pd import numpy as np movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv",index_col="title", usecols=["title","budget","vote_average","vote_count"]) movies.sample(n=5)
title | ngân sách | vote_average | vote_count |
---|---|---|---|
Giọng nói nhỏ | 0 | 6,6 | 61 |
Mức tăng trưởng 2 | 80000000 | 5,8 | 1155 |
Những năm đẹp nhất trong cuộc đời của chúng ta | 2100000 | 7,6 | 143 |
Tusk | 2800000 | 5.1 | 366 |
Hoạt động Chromite | 0 | 5,8 | 29 |
2. Tôi luôn khuyên bạn nên sắp xếp chỉ mục, đặc biệt nếu chỉ mục được tạo thành từ các chuỗi. Bạn sẽ nhận thấy sự khác biệt nếu bạn đang định giá với một tập dữ liệu lớn khi chỉ mục của bạn được sắp xếp.
Điều gì xảy ra nếu tôi không sắp xếp chỉ mục?
Không có vấn đề gì mã của bạn sẽ chạy mãi mãi. Đùa thôi, nếu các nhãn chỉ mục không được sắp xếp thì gấu trúc phải duyệt qua tất cả các nhãn một để khớp với truy vấn của bạn. Hãy tưởng tượng một cuốn từ điển Oxford không có trang mục lục, bạn định làm gì? Với chỉ mục được sắp xếp, bạn có thể nhanh chóng chuyển đến nhãn bạn muốn trích xuất, trường hợp của Pandastoo cũng vậy.
Trước tiên hãy để chúng tôi kiểm tra xem chỉ mục của chúng tôi có được sắp xếp hay không.
# check if the index is sorted or not ? movies.index.is_monotonic False
3. Rõ ràng, chỉ mục không được sắp xếp. Chúng tôi sẽ cố gắng chọn những bộ phim bắt đầu bằng A%. Điều này giống như viết
select * from movies where title like'A%'
movies.loc["Aa":"Bb"]
--------------------------------------------------------------------------- ValueErrorTraceback (most recent call last) ~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_slice_bound(self, labe l, side, kind) 4844try: -> 4845return self._searchsorted_monotonic(label, side) 4846except ValueError: ~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in _searchsorted_monotonic(se lf, label, side) 4805 -> 4806raise ValueError("index must be monotonic increasing or decreasing") 4807 ValueError: index must be monotonic increasing or decreasing During handling of the above exception, another exception occurred: KeyErrorTraceback (most recent call last) in ----> 1 movies.loc["Aa": "Bb"] ~\anaconda3\lib\site-packages\pandas\core\indexing.py in getitem (self, key) 1766 1767maybe_callable = com.apply_if_callable(key, self.obj) -> 1768return self._getitem_axis(maybe_callable, axis=axis) 1769 1770def _is_scalar_access(self, key: Tuple): ~\anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_axis(self, key, axis) 1910if isinstance(key, slice): 1911self._validate_key(key, axis) -> 1912return self._get_slice_axis(key, axis=axis) 1913elif com.is_bool_indexer(key): 1914return self._getbool_axis(key, axis=axis) ~\anaconda3\lib\site-packages\pandas\core\indexing.py in _get_slice_axis(self, slice_ob j, axis) 1794 1795labels = obj._get_axis(axis) -> 1796indexer = labels.slice_indexer( 1797slice_obj.start, slice_obj.stop, slice_obj.step, kind=self.name 1798) ~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in slice_indexer(self, start, end, step, kind) 4711slice(1, 3) 4712""" -> 4713start_slice, end_slice = self.slice_locs(start, end, step=step, kind=ki nd) 4714 4715# return a slice ~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in slice_locs(self, start, en d, step, kind) 4924start_slice = None 4925if start is not None: -> 4926start_slice = self.get_slice_bound(start, "left", kind) 4927if start_slice is None: 4928start_slice = 0 ~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_slice_bound(self, labe l, side, kind) 4846except ValueError: 4847# raise the original KeyError -> 4848raise err 4849 4850if isinstance(slc, np.ndarray): ~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_slice_bound(self, labe l, side, kind) 4840# we need to look up the label 4841try: -> 4842slc = self.get_loc(label) 4843except KeyError as err: 4844try: ~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 2646return self._engine.get_loc(key) 2647except KeyError: -> 2648return self._engine.get_loc(self._maybe_cast_indexer(key)) 2649indexer = self.get_indexer([key], method=method, tolerance=tolerance) 2650if indexer.ndim > 1 or indexer.size > 1: pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas\_libs\index.pyx in pandas._libs.index.IndexEngine._get_loc_duplicates() pandas\_libs\index.pyx in pandas._libs.index.IndexEngine._maybe_get_bool_indexer() KeyError: 'Aa'
4. Sắp xếp chỉ mục theo thứ tự tăng dần và thử lệnh tương tự để tận dụng lợi thế của việc sắp xếp cho việc phân loại từ vựng.
True
5. Bây giờ dữ liệu của chúng tôi đã được thiết lập và sẵn sàng để cắt từ điển. Bây giờ chúng ta hãy chọn tất cả các tiêu đề phim bắt đầu bằng chữ A cho đến chữ B.
title | ngân sách | vote_average | vote_count |
---|---|---|---|
Bỏ qua | 25000000 | 4.6 | 45 |
Bị bỏ rơi | 0 | 5,8 | 27 |
Bắt cóc | 35000000 | 5.6 | 961 |
Aberdeen | 0 | 7,0 | 6 |
Giới thiệu về Đêm qua | 12500000 | 6.0 | 210 |
... | ... | ... | ... |
Trận chiến cho Hành tinh khỉ | 1700000 | 5.5 | 215 |
Trận chiến của năm | 20000000 | 5,9 | 88 |
Trận chiến:Los Angeles | 70000000 | 5.5 | 1448 |
Battlefield Earth | 44000000 | 3.0 | 255 |
Chiến hạm | 209000000 | 5.5 | 2114 |
title | ngân sách | vote_average | vote_count |
---|---|---|---|
Æon Flux | 62000000 | 5,4 | 703 |
xXx:State of the Union | 60000000 | 4.7 | 549 |
xXx | 70000000 | 5,8 | 1424 |
eXistenZ | 15000000 | 6,7 | 475 |
[REC] ² | 5600000 | 6.4 | 489 |
ngân sách vote_average vote_count title
Không có trí tuệ để xem DataFrame trống vì dữ liệu được sắp xếp theo thứ tự ngược lại. Hãy để chúng tôi đảo ngược các ký tự và chạy lại.
title | ngân sách | vote_average | vote_count |
---|---|---|---|
B-Girl | 0 | 5.5 | 7 |
Ayurveda:Nghệ thuật tồn tại | 300000 | 5.5 | 3 |
Away We Go | 17000000 | 6,7 | 189 |
Tỉnh táo | 86000000 | 6.3 | 395 |
Avengers:Age of Ultron | 280000000 | 7.3 | 6767 |
... | ... | ... | ... |
Giới thiệu về Đêm qua | 12500000 | 6.0 | 210 |
Aberdeen | 0 | 7,0 | 6 |
Bắt cóc | 35000000 | 5.6 | 961 |
Bị bỏ rơi | 0 | 5,8 | 27 |
Bỏ qua | 25000000 | 4.6 | 45 |