การกรองแถว (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
รูปแบบเงื่อนไขที่ใช้บ่อย
| ประเภท | ตัวอย่าง | คำอธิบาย |
|---|---|---|
| Relational | df['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) |
| isin | df['col'].isin(['A', 'B', 'C']) | ค่าอยู่ในรายการ |
| str.contains | df['col'].str.contains('text') | คอลัมน์ข้อความมี substring |
| between | df['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()แทน