บทนำ
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()