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

วิธีเลือกข้อมูลย่อยด้วย Index Labels ใน Python Pandas (.loc[])

บทนำ

Pandas มี .loc และ .iloc สำหรับการเลือกข้อมือ: .loc ใช้กับฉลากดัชนี (Index Labels) คล้าย Python Dictionary, .iloc ใช้กับตำแหน่ง (Position) คล้าย Python List

การเลือกข้อมูลด้วย .loc[]

1. นำเข้าข้อมูลและตั้งค่าดัชนี

import pandas as pd

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.sort_index(inplace=True)
movies.head(3)

2. ดึงข้อมูลหนังเรื่องเดียว

# .loc ใช้วงเล็บเหลี่ยม [] ไม่ใช่วงเล็บโค้ง ()
movies.loc["Spider-Man 3"]
budget           258000000.0
vote_average            5.9
vote_count           3576.0
Name: Spider-Man 3, dtype: float64

3. ดึงช่วงข้อมูลด้วย Slice (รวมทั้งสองปลาย)

movies.loc["Alien":"Avatar"]

ได้ 167 แถว - สำคัญ: string slicing ใน .loc รวมทั้ง start และ stop (ต่างจาก Python list slicing)

4. ดึงหลายรายการที่ไม่ติดกัน (List of Labels)

movies.loc[["Avatar", "Avengers: Age of Ultron"]]
                         budget  vote_average  vote_count
title                                                   
Avatar                237000000           7.2       11800
Avengers: Age of Ultron 280000000           7.3        6767

5. เปลี่ยนลำดับการเลือกได้

movies.loc[["Avengers: Age of Ultron", "Avatar"]]

6. จัดการ Label ที่ไม่มีอยู่จริง

Pandas เวอร์ชันใหม่จะ raise KeyError หากมี label ไม่มีอยู่

"When is Avengers next movie?" in movies.index
# False

7. วิธีแก้: ใช้ .query() เพื่อข้ามข้อผิดพลาด

movies.query("title in ('Avatar', 'When is Avengers next Movie?')")

จะคืนเฉพาะรายการที่มีอยู่จริง

สรุป .loc[]

  • Single label: df.loc["label"] → Series
  • Slice: df.loc["start":"stop"] → DataFrame (inclusive)
  • List: df.loc[["label1", "label2"]] → DataFrame
  • ตรวจสอบ label ก่อนด้วย label in df.index หรือใช้ .query()