Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để chọn một tập hợp con dữ liệu bằng cách sử dụng thuật ngữ từ vựng trong Python Pandas?

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