เมธอด Series.str.contains() ใช้ค้นหา substring (ข้อความย่อย) ภายในคอลัมน์ข้อความ (string column) คืนค่า Boolean Series ใช้กรองแถวได้โดยตรง ใช้ Regular Expression ได้
ขั้นตอนการทำงาน
1. โหลดข้อมูล
import pandas as pd
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\CarRecords.csv")
2. กรองแถวที่คอลัมน์ Car มีคำว่า "Lamborghini"
filtered = dataFrame[dataFrame['Car'].str.contains('Lamborghini')]
print(filtered)
โค้ดตัวอย่างสมบูรณ์
import pandas as pd
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\CarRecords.csv")
print("DataFrame:\n", dataFrame)
# กรองแถวที่ Car มีคำว่า Lamborghini
filtered = dataFrame[dataFrame['Car'].str.contains('Lamborghini')]
print("\nFiltered rows containing 'Lamborghini':\n", filtered)
ผลลัพธ์
DataFrame:
Car Place UnitsSold
0 Audi Bangalore 80
1 Porsche Mumbai 110
2 RollsRoyce Pune 100
3 BMW Delhi 95
4 Mercedes Hyderabad 80
5 Lamborghini Chandigarh 80
6 Audi Mumbai 100
7 Mercedes Pune 120
8 Lamborghini Delhi 100
Filtered rows containing 'Lamborghini':
Car Place UnitsSold
5 Lamborghini Chandigarh 80
8 Lamborghini Delhi 100
พารามิเตอร์สำคัญของ str.contains()
| พารามิเตอร์ | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|
pat | (required) | Pattern string หรือ regex pattern |
case | True | True = case-sensitive, False = ignore case |
regex | True | True = ใช้ regex, False = exact string match |
na | NaN | ค่าที่ใช้แทน NaN ในผลลัพธ์ (True/False/NaN) |
ตัวอย่าง Regex Patterns
# เริ่มต้นด้วย B (BMW, Bentley)
df[df['Car'].str.contains('^B')]
# จบด้วย i (Audi, Lamborghini, etc.)
df[df['Car'].str.contains('i$')]
# มีตัวเลข
df[df['Car'].str.contains(r'\d')]
# หลาย pattern (OR)
df[df['Car'].str.contains('BMW|Audi|Mercedes')]
# Case insensitive
df[df['Car'].str.contains('bmw', case=False)]
# Exact match (ไม่ใช่ regex)
df[df['Car'].str.contains('BMW', regex=False)]
String Methods อื่นๆ ที่ใช้บ่อย
# Exact match (เร็วกว่า contains)
df[df['Car'] == 'BMW']
# เริ่มต้นด้วย
df[df['Car'].str.startswith('B')]
# จบด้วย
df[df['Car'].str.endswith('i')]
# Match pattern ทั้งหมด (คืน list of matches)
df['Car'].str.findall(r'[A-Z]')
# Extract ด้วย regex groups
df['Car'].str.extract(r'(B\w+)')
ประสิทธิภาพ
str.containsเร็วกว่า loop มาก (C-level implementation)- สำหรับ exact match ใช้
==หรือisin()เร็วกว่า - Compile regex เองถ้าใช้ซ้ำ:
import re; pat = re.compile(r'pattern'); df['col'].str.contains(pat)