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

Python Pandas: ค้นหาค่าเฉพาะใน DataFrame และแสดงแถวทั้งแถว

บทนำ

การค้นหาค่าเฉพาะใน 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