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

Python Pandas - เลือกแถว DataFrame ตามเงื่อนไข (Conditional Selection)

การกรองแถว (Filtering Rows) ใน DataFrame ตามเงื่อนไขเป็นการดำเนินการพื้นฐานที่สำคัญที่สุดในการวิเคราะห์ข้อมูล ใช้ Boolean Indexing** (Boolean Masking) โดยสร้างเงื่อนไขที่คืนค่า True/False สำหรับแต่ละแถว

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

1. โหลดข้อมูลจาก CSV

import pandas as pd

dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\SalesRecords.csv")

2. กรองแถวที่ Reg_Price < 1000

resData = dataFrame[dataFrame.Reg_Price < 1000]
print(resData)

โค้ดตัวอย่างสมบูรณ์

import pandas as pd

dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\SalesRecords.csv")
print("DataFrame:\n", dataFrame)
print("\nRows, Cols:", dataFrame.shape)

# กรอง Reg_Price < 1000
resData = dataFrame[dataFrame.Reg_Price < 1000]
print("\nFiltered DataFrame (Reg_Price < 1000):\n", resData)

ผลลัพธ์

DataFrame:
        Car Date_of_Purchase  Reg_Price
0      BMW       10/10/2020       1000
1    Lexus       10/12/2020        750
2     Audi       10/17/2020        750
3   Jaguar       10/16/2020       1500
4  Mustang       10/19/2020       1100
5  Lamborghini 10/22/2020       1000

Rows, Cols: (6, 3)

Filtered DataFrame (Reg_Price < 1000):
      Car Date_of_Purchase  Reg_Price
1   Lexus       10/12/2020        750
2    Audi       10/17/2020        750

รูปแบบเงื่อนไขที่ใช้บ่อย

ประเภทตัวอย่างคำอธิบาย
Relationaldf['col'] > 100>, <, >=, <=, ==, !=
Logical AND(df['a'] > 10) & (df['b'] < 20)ต้องเป็นจริงทั้งคู่ (ใช้ & ไม่ใช่ and)
Logical OR(df['a'] > 10) | (df['b'] < 20)จริงอย่างน้อยหนึ่งด้าน (ใช้ | ไม่ใช่ or)
Logical NOT~(df['a'] > 10)นิเสธเงื่อนไข (ใช้ ~ ไม่ใช่ not)
isindf['col'].isin(['A', 'B', 'C'])ค่าอยู่ในรายการ
str.containsdf['col'].str.contains('text')คอลัมน์ข้อความมี substring
betweendf['col'].between(10, 20)อยู่ในช่วง (inclusive)

ตัวอย่างเงื่อนไขซับซ้อน

# รถที่ราคา 1000-2000 และอยู่ใน Delhi หรือ Mumbai
mask = (dataFrame['Reg_Price'].between(1000, 2000)) & (dataFrame['Place'].isin(['Delhi', 'Mumbai']))
result = dataFrame[mask]

# ใช้ query() (อ่านง่ายกว่าสำหรับเงื่อนไขซับซ้อน)
result = dataFrame.query("1000 <= Reg_Price <= 2000 and Place in ['Delhi', 'Mumbai']")

⚠️ ข้อผิดพลาดที่พบบ่อย

  • ใช้ and/or แทน &/| → Error
  • ลืมวงเล็บครอบเงื่อนไขแต่ละอัน → Operator precedence error
  • เปรียบเทียบ NaN ด้วย == → ใช้ isna() แทน