0Pricing
Pandas & NumPy Academy · บทเรียน

การเลือกคอลัมน์ตามรูปแบบชื่อ

ใช้ filter(like=), filter(regex=) และ list comprehensions เพื่อเลือกคอลัมน์ที่ชื่อตรงกับรูปแบบที่กำหนด

การเลือกคอลัมน์ตามรูปแบบชื่อ เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงเลือกคอลัมน์ตามรูปแบบ

DataFrame จากแหล่งข้อมูลจริงมักมีคอลัมน์หลายสิบหรือหลายร้อยคอลัมน์ และคุณแทบไม่จำเป็นต้องใช้ทั้งหมด เมื่อคอลัมน์ใช้รูปแบบการตั้งชื่อ เช่น คำนำหน้าอย่าง sales_ คำลงท้ายอย่าง _2023 หรือรูปแบบที่มีคำสำคัญ การเลือกตาม รูปแบบชื่อ ดูแลรักษาได้ง่ายกว่าการระบุชื่อทุกคอลัมน์อย่างชัดเจนมาก หากโครงสร้างเปลี่ยน การเลือกตามรูปแบบก็จะปรับตามโดยอัตโนมัติ

Pandas มีเครื่องมือหลักสองอย่าง ได้แก่ เมธอด filter() และการสร้างรายการแบบกระชับด้วย df.columns

import pandas as pd

df = pd.DataFrame({
    'sales_jan': [100, 200],
    'sales_feb': [150, 250],
    'cost_jan': [50, 80],
    'cost_feb': [60, 90],
    'profit': [140, 280]
})

print(df.columns.tolist())
# ['sales_jan', 'sales_feb', 'cost_jan', 'cost_feb', 'profit']

filter(like=) สำหรับจับคู่สตริงย่อย

DataFrame.filter(like='substring') เลือกคอลัมน์ที่ชื่อ มี สตริงย่อยที่กำหนดอยู่ ณ ตำแหน่งใดก็ได้ในชื่อ โดยคำนึงถึงตัวพิมพ์เล็ก–ใหญ่ เมธอดนี้ทำงานกับแกนคอลัมน์เป็นค่าเริ่มต้น และส่งคืน DataFrame ใหม่ที่มีเฉพาะคอลัมน์ที่ตรงกัน

นี่คือเครื่องมือเลือกตามรูปแบบที่ง่ายที่สุด ไม่ต้องมีความรู้เรื่องนิพจน์ทั่วไป เพียงระบุสตริงย่อยที่ต้องการค้นหา

import pandas as pd

df = pd.DataFrame({
    'sales_jan': [100, 200],
    'sales_feb': [150, 250],
    'cost_jan': [50, 80],
    'revenue_q1': [110, 210]
})

# Select columns whose name contains 'sales'
sales_cols = df.filter(like='sales')
print(sales_cols)
#    sales_jan  sales_feb
# 0        100        150
# 1        200        250

filter(regex=) สำหรับจับคู่รูปแบบ

DataFrame.filter(regex='pattern') เลือกคอลัมน์ที่ชื่อสอดคล้องกับ นิพจน์ทั่วไป ที่กำหนด วิธีนี้มีประสิทธิภาพมากกว่า like= เพราะนิพจน์ทั่วไปช่วยให้จับคู่คำนำหน้า คำลงท้าย ตำแหน่งตัวเลข หรือรูปแบบที่ซับซ้อนได้ นิพจน์ทั่วไปจะจับคู่ที่ตำแหน่งใดก็ได้ในชื่อคอลัมน์ ไม่ได้ยึดเฉพาะจุดเริ่มต้น

import pandas as pd

df = pd.DataFrame({
    'q1_revenue': [100],
    'q2_revenue': [200],
    'q1_cost': [40],
    'q2_cost': [60],
    'annual_total': [360]
})

# Select columns ending with '_revenue'
revenue_cols = df.filter(regex='_revenue$')
print(revenue_cols)
#    q1_revenue  q2_revenue
# 0         100         200

# Select columns starting with 'q' (quarter columns)
quarter_cols = df.filter(regex='^q')
print(quarter_cols.columns.tolist())
# ['q1_revenue', 'q2_revenue', 'q1_cost', 'q2_cost']

การสร้างรายการแบบกระชับด้วย df.columns

หากต้องการความยืดหยุ่นสูงสุด ให้วนซ้ำผ่าน df.columns ด้วย การสร้างรายการแบบกระชับ และใช้เมธอดสตริงใด ๆ ของ Python เพื่อสร้างรายการคอลัมน์ วิธีนี้ใช้ได้กับ startswith, endswith, contains การตรวจสอบความยาวสตริง หรือตรรกะแบบกำหนดเองที่นิพจน์ทั่วไปเพียงอย่างเดียวไม่สามารถสื่อได้

import pandas as pd

df = pd.DataFrame({
    'age': [25, 30],
    'age_group': ['young', 'mid'],
    'income': [50000, 70000],
    'income_tax': [8000, 12000],
    'name': ['Alice', 'Bob']
})

# Select columns that start with 'income'
income_cols = [c for c in df.columns if c.startswith('income')]
print(df[income_cols])
#    income  income_tax
# 0   50000        8000
# 1   70000       12000

การเลือกตามคำลงท้ายของชื่อคอลัมน์

เมธอด str.endswith() ของดัชนีคอลัมน์เป็นวิธีที่สะอาดที่สุดในการเลือกคอลัมน์ตามส่วนต่อท้าย ออบเจ็กต์ดัชนีของ Pandas รองรับเมธอดตัวเข้าถึง .str ดังนั้นคุณจึงดำเนินการกับสตริงในชื่อคอลัมน์ทั้งหมดได้พร้อมกัน แล้วใช้อาร์เรย์บูลีนที่ได้เพื่อเลือกบางส่วนของ DataFrame

import pandas as pd

df = pd.DataFrame({
    'revenue_2022': [100],
    'cost_2022': [40],
    'revenue_2023': [150],
    'cost_2023': [55],
    'notes': ['ok']
})

# Use Index.str.endswith for suffix selection
cols_2023 = df.columns[df.columns.str.endswith('_2023')]
print(df[cols_2023])
#    revenue_2023  cost_2023
# 0           150         55

การลบคอลัมน์ตามรูปแบบ

บางครั้งการตัดออกคอลัมน์ชุดหนึ่งอาจง่ายกว่าการระบุชื่อคอลัมน์ที่ต้องการเก็บไว้ ให้ใช้การเลือกตามรูปแบบร่วมกับ drop() หรือใช้ส่วนเติมเต็ม โดยสร้างรายการคอลัมน์ที่ต้องการลบ แล้วเรียก df.drop(columns=cols_to_drop) อีกทางเลือกคือดึงคอลัมน์ที่คุณไม่ต้องการ แล้วส่งคอลัมน์เหล่านั้นให้ drop

import pandas as pd

df = pd.DataFrame({
    'id': [1, 2],
    'name': ['A', 'B'],
    'temp_col1': [0, 0],
    'temp_col2': [0, 0],
    'score': [90, 80]
})

# Drop columns whose name starts with 'temp_'
temp_cols = [c for c in df.columns if c.startswith('temp_')]
cleaned = df.drop(columns=temp_cols)
print(cleaned)
#    id name  score
# 0   1    A     90
# 1   2    B     80

การเลือกคอลัมน์ตัวเลขด้วย select_dtypes

เมื่อคุณต้องการเลือกคอลัมน์ตามชนิดข้อมูล แทนรูปแบบชื่อ ให้ใช้ df.select_dtypes(include=) การส่ง include='number' จะเลือกคอลัมน์ตัวเลขทั้งหมด (int และ float) ส่วน include='object' จะเลือกคอลัมน์สตริง และ include='datetime' จะเลือกคอลัมน์วันที่และเวลา

วิธีนี้มีประโยชน์อย่างยิ่งก่อนใช้การรวมค่าตัวเลข เพราะจะไม่เผลอเรียก mean() กับคอลัมน์ข้อความ

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob'],
    'age': [25, 30],
    'salary': [50000.0, 70000.0],
    'dept': ['Eng', 'HR']
})

# Select only numeric columns
numeric_df = df.select_dtypes(include='number')
print(numeric_df)
#    age   salary
# 0   25  50000.0
# 1   30  70000.0

# Exclude numeric columns
text_df = df.select_dtypes(exclude='number')
print(text_df)
#     name dept
# 0  Alice  Eng
# 1    Bob   HR

filter() กับดัชนีแถวด้วย axis=0

โดยค่าเริ่มต้น filter() จะทำงานกับคอลัมน์ (axis=1) แต่คุณยังสามารถกรองแถวตามป้ายกำกับดัชนีได้ด้วยการส่ง axis=0 วิธีนี้มีประโยชน์เมื่อ DataFrame ของคุณมีป้ายกำกับดัชนีสตริงที่สื่อความหมาย และคุณต้องการเลือกแถวที่ป้ายกำกับดัชนีตรงกับรูปแบบที่กำหนด ซึ่งเป็นเทคนิคที่พบไม่บ่อยนักแต่มีประโยชน์

import pandas as pd

df = pd.DataFrame({
    'value': [10, 20, 30, 40]
}, index=['alpha_a', 'beta_b', 'alpha_c', 'gamma_d'])

# Filter rows by index label pattern
alpha_rows = df.filter(like='alpha', axis=0)
print(alpha_rows)
#          value
# alpha_a     10
# alpha_c     30

การรวมรูปแบบการเลือกคอลัมน์

งานเลือกคอลัมน์จริงมักใช้หลายวิธีร่วมกัน เช่น ใช้นิพจน์ปกติเพื่อค้นหาชุดข้อมูลพื้นฐาน แล้วกรองเพิ่มเติมด้วยการสร้างรายการแบบลิสต์ การสร้างรายการคอลัมน์ทีละขั้นและตรวจสอบก่อนเลือกบางส่วน จะช่วยป้องกันข้อผิดพลาดที่เกิดขึ้นโดยไม่แสดงข้อความแจ้งเตือน เช่น การลบคอลัมน์ที่จำเป็นโดยไม่ตั้งใจ หรือรวมคอลัมน์ที่ไม่ต้องการ

import pandas as pd

df = pd.DataFrame(columns=[
    'user_id', 'user_name', 'user_email',
    'product_id', 'product_name', 'product_price',
    'order_total', 'order_date'
])

# Step 1: columns that start with 'user_' or 'order_'
step1 = [c for c in df.columns if c.startswith('user_') or c.startswith('order_')]

# Step 2: exclude email (PII)
final_cols = [c for c in step1 if 'email' not in c]
print(final_cols)
# ['user_id', 'user_name', 'order_total', 'order_date']

การจัดลำดับคอลัมน์ใหม่ตามรูปแบบ

การเลือกตามรูปแบบยังมีประโยชน์สำหรับการจัดลำดับคอลัมน์ใหม่ด้วย ให้เลือกคอลัมน์ที่ต้องการไว้ก่อน (เช่น ID และข้อมูลกำกับ) แล้วต่อด้วยคอลัมน์ที่เหลือตามลำดับที่กำหนด การจัดลำดับใหม่ทำให้ DataFrames อ่านง่ายขึ้น และช่วยให้ผลลัพธ์มีโครงสร้างที่สม่ำเสมอ

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'metric_b': [1], 'metric_a': [2],
    'id': [10], 'label': ['x'],
    'metric_c': [3]
})

# Put id and label first, then sort metric columns alphabetically
id_cols = ['id', 'label']
metric_cols = sorted([c for c in df.columns if c.startswith('metric')])
ordered = df[id_cols + metric_cols]
print(ordered.columns.tolist())
# ['id', 'label', 'metric_a', 'metric_b', 'metric_c']

ตัวอย่างเชิงปฏิบัติ: ข้อมูลแบบสำรวจที่มีคอลัมน์จำนวนมาก

กรณีใช้งานทั่วไปของการเลือกตามรูปแบบคือชุดข้อมูลแบบสำรวจที่มีคอลัมน์จำนวนมาก ซึ่งแต่ละคำถามสร้างหลายคอลัมน์ เช่น q1_score, q1_text, q2_score เป็นต้น คุณสามารถดึงคอลัมน์คะแนนทั้งหมดด้วยนิพจน์ปกติเพียงรายการเดียว คำนวณค่าเฉลี่ย และแยกคอลัมน์สำหรับการวิเคราะห์ออกจากคำตอบข้อความอิสระ

import pandas as pd

survey = pd.DataFrame({
    'respondent_id': [1, 2, 3],
    'q1_score': [4, 3, 5],
    'q2_score': [3, 4, 4],
    'q3_score': [5, 5, 3],
    'q1_comment': ['good', 'ok', 'great'],
    'q2_comment': ['fine', 'nice', 'meh']
})

# All score columns
score_cols = survey.filter(regex='_score$').columns
survey['avg_score'] = survey[score_cols].mean(axis=1)
print(survey[['respondent_id', 'avg_score']])
#    respondent_id  avg_score
# 0              1   4.000000
# 1              2   4.000000
# 2              3   4.000000

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับการเลือกคอลัมน์ตามรูปแบบ

ทบทวนบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า filter(like=) ใช้เลือกคอลัมน์ที่มีสตริงย่อย, filter(regex=) ใช้นิพจน์ปกติเพื่อจับคู่รูปแบบที่ยืดหยุ่น และการสร้างลิสต์แบบ list comprehensions บน df.columns ร่วมกับเมธอดสตริงของ Python ให้ความยืดหยุ่นสูงสุด ใช้ select_dtypes() เพื่อเลือกตามชนิดข้อมูล บทถัดไปเราจะเรียนรู้การตรวจหาค่าที่หายไป (NaN) ใน DataFrames

คำถามที่พบบ่อย

บทเรียน “การเลือกคอลัมน์ตามรูปแบบชื่อ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเลือกคอลัมน์ตามรูปแบบชื่อ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเลือกคอลัมน์ตามรูปแบบชื่อ”

ใช้ filter(like=), filter(regex=) และ list comprehensions เพื่อเลือกคอลัมน์ที่ชื่อตรงกับรูปแบบที่กำหนด คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การเลือกคอลัมน์ตามรูปแบบชื่อ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม

ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การใช้ดัชนีบูลีนกับ DataFrames
  2. เมธอด query()
  3. ตัวกรอง isin() และ between()
  4. การเลือกคอลัมน์ตามรูปแบบชื่อ
← กลับไปที่ Pandas & NumPy Academy