DataFrame พื้นฐาน
ประมาณ 25 นาที
เป้าหมายของบท
- อ่านข้อมูลด้วย read_csv และดูโครงสร้างเบื้องต้น (shape/columns/dtypes/head/describe)
- เลือกคอลัมน์เดียวหรือหลายคอลัมน์ และเรียงด้วย sort_values
- สำรวจคอลัมน์ข้อความด้วย value_counts/unique
จาก SQL มาสู่ pandas
จบสาย SQL แล้ว ต่อไปนี้จะเรียนวิธีทำงานกับข้อมูลด้วยภาษา Python ผ่านไลบรารี pandas แนวคิดหลายอย่างเหมือนกับ SQL ทุกประการ (filter, group, join) แค่เปลี่ยน syntax — สายนี้จะเน้นเทียบให้เห็นความเหมือน
หน่วยข้อมูลหลักของ pandas คือ DataFrame (ตาราง 2 มิติ คล้ายตารางใน SQL) และ Series (หนึ่งคอลัมน์ของ DataFrame)
อ่านข้อมูลด้วย read_csv
import pandas as pd
products = pd.read_csv("data/products.csv")
หลังอ่านไฟล์แล้ว ควรสำรวจโครงสร้างก่อนเสมอ:
| คำสั่ง | บอกอะไร |
|---|---|
products.head() |
ตัวอย่าง 5 แถวแรก |
products.shape |
(จำนวนแถว, จำนวนคอลัมน์) |
products.columns |
รายชื่อคอลัมน์ |
products.dtypes |
ชนิดข้อมูลของแต่ละคอลัมน์ |
products.describe() |
สรุปสถิติของคอลัมน์ตัวเลข (count, mean, std, min, max, …) |
เลือกคอลัมน์
products['price'] # คอลัมน์เดียว → ได้ Series
products[['product_name', 'price']] # หลายคอลัมน์ → ได้ DataFrame
เรียงข้อมูลด้วย sort_values
products.sort_values('price', ascending=False).head(5)
- ค่าเริ่มต้นของ
ascendingคือTrue(น้อยไปมาก) — ถ้าอยากได้มากไปน้อยต้องใส่ascending=Falseเอง - เรียงหลายคอลัมน์ได้ด้วยการส่ง list:
sort_values(['category', 'price']) .nlargest(n, 'col')/.nsmallest(n, 'col')ทำสิ่งเดียวกับsort_values().head(n)แต่สื่อความหมายชัดกว่า
สำรวจคอลัมน์ข้อความด้วย value_counts และ unique
products['category'].value_counts() # นับจำนวนแถวของแต่ละค่า เรียงมากไปน้อยให้อัตโนมัติ
products['category'].unique() # รายชื่อค่าที่ไม่ซ้ำ (ไม่มีตัวเลขจำนวน)
value_counts() ตอบคำถาม “ค่าไหนเยอะที่สุด” ได้ตรงๆ ส่วน unique() แค่บอกว่า “มีค่าอะไรบ้าง” — เลือกใช้ให้ตรงกับคำถาม
ตัวอย่างแก้โจทย์
กด "ขั้นต่อไป" ทีละขั้น ลองรันและแก้โค้ดในแต่ละขั้นได้
5 สินค้าราคาแพงที่สุด เรียงจากแพงไปถูก
ร้านอยากรู้ว่าสินค้าตัวไหนแพงที่สุด 5 อันดับแรก
อ่านไฟล์ด้วย
read_csvแล้วดูตัวอย่างข้อมูลด้วย.head()
หมวดสินค้าไหนมีสินค้าเยอะที่สุด
ทีมสินค้าอยากรู้ว่าหมวดไหนมีสินค้าในสต็อกเยอะที่สุด
.value_counts()นับจำนวนแถวของแต่ละค่าที่ไม่ซ้ำในคอลัมน์ และเรียงจากมากไปน้อยให้อัตโนมัติ
เติมช่องว่าง
แทน ___ ด้วยโค้ดที่ถูกต้อง แล้วกดตรวจคำตอบ
หา 5 สินค้าที่ราคาถูกที่สุด แสดงคอลัมน์ product_name กับ price เก็บไว้ในตัวแปร result
เติม ___ ให้ครบ
แบบฝึกท้ายบท
บทนี้จะนับว่าเสร็จเมื่อผ่านข้อพื้นฐานและประยุกต์ครบ ข้อท้าทายได้ดาวเพิ่ม
🟢 พื้นฐาน
ขนาดของตาราง orders (จำนวนแถว, จำนวนคอลัมน์) เก็บไว้ในตัวแปร orders_shape
วิธีจ่ายเงินทั้งหมดที่มีในระบบ (ไม่ซ้ำ) เรียงตามตัวอักษร เก็บเป็น list ไว้ในตัวแปร methods
5 สินค้าที่มีต้นทุน (cost) ต่ำที่สุด แสดงคอลัมน์ product_name, cost เก็บไว้ในตัวแปร result
จำนวนลูกค้าทั้งหมดในระบบ เก็บไว้ในตัวแปร n_customers
🟡 ประยุกต์
ราคาเฉลี่ยของสินค้าทั้งหมด ปัด 2 ตำแหน่ง เก็บไว้ในตัวแปร avg_price
3 หมวดสินค้าที่มีจำนวนสินค้ามากที่สุด (ผลจาก value_counts) เก็บไว้ในตัวแปร result
เรียงสินค้าตามหมวดก่อน แล้วเรียงตามราคาในแต่ละหมวด (ถูกไปแพง) เอาแค่ 5 แถวแรก แสดง category, product_name, price เก็บไว้ในตัวแปร result
🔴 ท้าทาย
ราคาเฉลี่ยของ 10 สินค้าที่แพงที่สุด ปัด 2 ตำแหน่ง เก็บไว้ในตัวแปร avg_top10
Quiz
สรุป
- read_csv อ่านไฟล์เป็น DataFrame ดูโครงสร้างเบื้องต้นด้วย shape/columns/dtypes/head/describe
- sort_values เรียงข้อมูล ค่าเริ่มต้นคือน้อยไปมาก (ascending=True)
- value_counts() นับจำนวนของแต่ละค่า ต่างจาก unique() ที่ให้แค่รายชื่อค่าที่ไม่ซ้ำ
คำถามสัมภาษณ์
ได้ไฟล์ข้อมูลใหม่มาครั้งแรก ควรดูอะไรก่อนเริ่มวิเคราะห์
เริ่มจากดูภาพรวมของโครงสร้างก่อน: shape (มีกี่แถวกี่คอลัมน์), dtypes (แต่ละคอลัมน์เป็นชนิดข้อมูลอะไร),
head() (ตัวอย่างข้อมูลจริง), และ describe() (สรุปสถิติของคอลัมน์ตัวเลข)
หลังจากนั้นควรเช็คคุณภาพข้อมูลคร่าวๆ ด้วย isna().sum() (มีค่าว่างไหม) และ duplicated().sum()
(มีแถวซ้ำไหม) ก่อนเริ่มวิเคราะห์จริง เพื่อรู้ล่วงหน้าว่าต้องทำความสะอาดอะไรบ้าง