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

Python Pandas - กรองแถวด้วย str.contains() ค้นหาข้อความในคอลัมน์

เมธอด 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
caseTrueTrue = case-sensitive, False = ignore case
regexTrueTrue = ใช้ regex, False = exact string match
naNaNค่าที่ใช้แทน 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)