Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách chọn tập con dữ liệu bằng cắt theo từ điển trong Python Pandas (Phiên bản chi tiết)

Giới thiệu

Pandas cung cấp khả năng chọn dữ liệu kép: theo vị trí chỉ mục (index position) hoặc theo nhãn chỉ mục (index labels). Trong bài viết này, tôi sẽ hướng dẫn cách "Chọn tập con dữ liệu bằng cắt theo từ điển" (lexicographical slicing).

Google đầy ắp các bộ dữ liệu. Tìm kiếm bộ dữ liệu phim trên kaggle.com. Bài viết này sử dụng bộ dữ liệu phim từ kaggle.

Cách thực hiện

  • Nhập bộ dữ liệu phim chỉ với các cột cần thiết 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)
budgetvote_averagevote_count
titile
Little Voice06.661
Grown Ups 2800000005.81155
The Best Years of Our Lives21000007.6143
Tusk28000005.1366
Operation Chromite05.829
  • Tôi luôn khuyến khích sắp xếp chỉ mục, đặc biệt khi chỉ mục được tạo từ chuỗi ký tự. Bạn sẽ nhận thấy sự khác biệt nếu đang xử lý bộ dữ liệu lớn khi chỉ mục đã đượ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 vấn đề gì, code của bạn sẽ chạy... mãi mãi. Đùa thôi, thực tế nếu các nhãn chỉ mục chưa được sắp xếp, pandas phải duyệt qua tất cả các nhãn một per một để khớp với truy vấn của bạn. Hãy tưởng tượng một từ điển Oxford không có trang chỉ mục, bạn sẽ làm gì? Với chỉ mục đã sắp xếp, bạn có thể nhảy nhanh đến nhãn mong muốn, pandas cũng hoạt động tương tự.

Hãy kiểm tra xem chỉ mục của chúng ta đã được sắp xếp hay chưa:

# kiểm tra xem chỉ mục đã được sắp xếp hay chưa?
movies.index.is_monotonic
# Kết quả: False
  • Rõ ràng, chỉ mục chưa được sắp xếp. Chúng ta sẽ thử chọn các phim bắt đầu bằng A%. Điều này tương đương với câu lệnh SQL:

select * from movies where title like 'A%'
movies.loc["Aa":"Bb"]

Lỗi xảy ra vì chỉ mục chưa đơn điệu (monotonic):

ValueError: index must be monotonic increasing or decreasing
KeyError: 'Aa'
  • Sắp xếp chỉ mục theo thứ tự tăng dần và thử lại lệnh trên để tận dụng lợi thế của cắt theo từ điển.

movies.sort_index(inplace=True)
movies.index.is_monotonic
# Kết quả: True
  • Bây giờ dữ liệu của chúng ta đã sẵn sàng cho cắt theo từ điển. Hãy chọn tất cả các tiêu đề phim từ chữ A đến chữ B.

budgetvote_averagevote_count
title
Abandon250000004.645
Abandoned05.827
Abduction350000005.6961
Aberdeen07.06
About Last Night125000006.0210
............
Battle for the Planet of the Apes17000005.5215
Battle of the Year200000005.988
Battle: Los Angeles700000005.51448
Battlefield Earth440000003.0255
Battleship2090000005.52114

292 hàng × 3 cột

True

titlebudgetvote_averagevote_count
Æon Flux620000005.4703
xXx: State of the Union600000004.7549
xXx700000005.81424
eXistenZ150000006.7475
[REC]²56000006.4489

budget vote_average vote_count title

Điều này dễ hiểu vì nhận được DataFrame rỗng do dữ liệu được sắp xếp theo thứ tự ngược lại. Hãy đảo ngược thứ tự chữ cái và chạy lại.

titlebudgetvote_averagevote_count
B-Girl05.57
Ayurveda: Art of Being3000005.53
Away We Go170000006.7189
Awake860000006.3395
Avengers: Age of Ultron2800000007.36767
............
About Last Night125000006.0210
Aberdeen07.06
Abduction350000005.6961
Abandoned05.827
Abandon250000004.645

228 hàng × 3 cột