การเลือกคอลัมน์ตามรูปแบบชื่อ
ใช้ 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 250filter(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 HRfilter() กับดัชนีแถวด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การใช้ดัชนีบูลีนกับ DataFrames
- เมธอด query()
- ตัวกรอง isin() และ between()
- การเลือกคอลัมน์ตามรูปแบบชื่อ