Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีเลือกข้อมูลย่อยด้วย Lexicographical Slicing ใน Python Pandas

บทนำ

Pandas มีความสามารถในการเลือกข้อมูลย่อย (Subset Selection) สองวิธี ได้แก่ ด้วยตำแหน่งดัชนี (Index Position) และด้วยฉลากดัชนี (Index Labels) บทความนี้จะสาธิตวิธี "Select a Subset Of Data Using lexicographical slicing" หรือการตัดข้อมูลแบบเล็กซิโคกราฟิกอล

ข้อมูลตัวอย่างใช้ Movies Dataset จาก Kaggle

ขั้นตอนการทำงาน

1. นำเข้าข้อมูลภาพยนตร์พร้อมคอลัมน์ที่จำเป็น

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)

2. เรียงลำดับดัชนี (แนะนำเป็นอย่างยิ่ง)

หากดัชนีเป็นสตริง ควรเรียงลำดับก่อน เพื่อประสิทธิภาพที่ดีขึ้น โดยเฉพาะข้อมูลขนาดใหญ่

เกิดอะไรขึ้นถ้าไม่เรียงดัชนี?

Pandas จะต้องตรวจสอบทุกลายเบลทีละตัว (Linear Scan) ซึ่งช้า มากกว่าการใช้ Binary Search บนดัชนีที่เรียงแล้ว

# ตรวจสอบว่าดัชนีเรียงแล้วหรือยัง
movies.index.is_monotonic
# False

3. ลองเลือกหนังที่ขึ้นต้นด้วย A% (เหมือน SQL: WHERE title LIKE 'A%')

movies.loc["Aa":"Bb"]

ผลลัพธ์: ValueError: index must be monotonic increasing or decreasing เพราะดัชนีไม่ได้เรียง

4. เรียงดัชนีแบบออสเซนดิงแล้วลองใหม่

movies.sort_index(inplace=True)
movies.loc["Aa":"Bb"]

ตอนนี้ทำงานได้แล้ว - ได้หนังที่ขึ้นต้นด้วย A ถึง B

5. การตัดแบบย้อนกลับ (Reverse Slicing)

หากดัชนีเรียงแบบดีเซนดิง ต้องสลับลำดับ start และ stop

movies.sort_index(ascending=False, inplace=True)
movies.loc["Bb":"Aa"]  # ต้องสลับลำดับ

Lexicographical Slicing ใน Pandas ทำงานได้เฉพาะเมื่อดัชนีเรียงลำดับแล้วเท่านั้น