บทนำ
การค้นหาค่าเฉพาะใน DataFrame และดึงแถวทั้งแถวที่ตรงเงื่อนไข สามารถทำได้หลายวิธี โค้ดตัวอย่างใช้ลูปตรวจสอบคอลัมน์ Reg_Price แล้วใช้ iloc[] ดึงแถว
โค้ดต้นฉบับ (Manual Loop)
import pandas as pd
df = pd.DataFrame({
"Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Cubic_Capacity": [2000, 1800, 1500, 2500, 2200, 3000],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000],
"Units_Sold": [100, 120, 150, 110, 200, 250]
})
# ค้นหาด้วยลูป
for i in range(len(df)):
if df['Reg_Price'].iloc[i] == 5000:
idx = i
break
# ดึงแถวด้วย iloc
result = df.iloc[idx]
print(result)
วิธีที่ดีกว่า: Boolean Indexing / query()
1. Boolean Indexing (มาตรฐาน)
# คืน DataFrame (หลายแถวได้)
result = df[df['Reg_Price'] == 5000]
print(result)
# คืน Series (แถวเดียว) - ใช้ iloc[0]
result = df[df['Reg_Price'] == 5000].iloc[0]
print(result)
2. query() (อ่านง่าย)
result = df.query("Reg_Price == 5000")
print(result)
3. loc[] กับ boolean mask
result = df.loc[df['Reg_Price'] == 5000]
print(result)
4. ค้นหาในทุกคอลัมน์ (Global search)
# หา 5000 ในทุกคอลัมน์
mask = df.eq(5000).any(axis=1)
result = df[mask]
print(result)
ผลลัพธ์ (ทุกวิธี)
Car Cubic_Capacity Reg_Price Units_Sold
2 Tesla 1500 5000 150
ค้นหาหลายเงื่อนไข
# AND
df[(df['Reg_Price'] > 5000) & (df['Units_Sold'] > 100)]
# OR
df[(df['Car'] == 'BMW') | (df['Car'] == 'Tesla')]
# IN
df[df['Car'].isin(['BMW', 'Tesla', 'Audi'])]
# String contains
df[df['Car'].str.contains('s', case=False)]
ประสิทธิภาพ
| วิธี | ความเร็ว | เหมาะสำหรับ |
|---|---|---|
| Boolean indexing | เร็วที่สุด | General purpose |
| query() | เร็ว (large DF) | Complex conditions, readability |
| Manual loop | ช้ามาก | ไม่แนะนำ |
| df.eq().any(axis=1) | ปานกลาง | Global search ทุกคอลัมน์ |
สรุป
อย่าใช้ manual loop ค้นหาใน DataFrame ใช้ df[df['col'] == value] (boolean indexing) หรือ df.query('col == value') เร็วกว่า อ่านง่าย และเป็น idiomatic Pandas