Pandas คืออะไร? อันนี้เป็นคำถามยอดฮิตของเพื่อนๆที่เริ่มเขียน Python
Pandas คือ library สำหรับจัดการ dataframe ของภาษา Python ที่ได้รับความนิยมสูงสุด ถ้าใครอยากจะทำ data science ต้องเขียนเป็นทุกคน 555+ สร้างและพัฒนาโดย Wes McKinney อีกหนึ่งตำนานของวงการ Python เราใช้ pandas ร่วมกับ numpy, matplotlib, seaborn ตลอดเลย

บทความนี้จะครอบคลุมการใช้งานพื้นฐานของ pandas
ดาวน์โหลดไฟล์ penguins.csv แล้วลองทำตามได้เลยบน Google Colab นี้นะครับ แถมชี้เป้าคอร์สเรียนออนไลน์ฟรีตอนท้ายของบทความนี้ 👏
Prerequisite ก่อนอ่านต่อ ต้องประกาศตัวแปรใน Python เป็นแล้วนะ
สำหรับ tutorial ในบทความนี้ ถ้าเพื่อนๆเขียน Basic Python เป็นแล้ว ลองทำตามได้สบายเลย
- Load CSV file
- Preview dataframe
- Dataframe information
- Dataframe statistics
- Drop missing values
- Select columns
- Rename columns
- Drop columns
- Slice rows
- Filter rows
- Sort dataframe
- Write CSV file
Getting Started
สำหรับเพื่อนๆที่อยากทำตาม tutorial นี้ให้เปิด Google Colab ขึ้นมาแล้วอัพโหลดไฟล์ penguins.csv ขึ้นไปก่อน (ไฟล์นี้จะถูกลบเมื่อเราหลุดจาก session หรือปิดเบราเซอร์)

เริ่มที่การ import pandas ตั้งชื่อว่า pd
เวลาเรียกใช้งานฟังก์ชันจะได้เขียนง่ายๆ เช่น pd.read_csv()
โดยฟังก์ชันนี้จะโหลดข้อมูล csv ของเราเข้าสู่ python เป็น dataframe
import pandas as pd
penguins = pd.read_csv("penguins.csv")
เราสามารถ preview 5 แถวบนสุดและ 5 แถวล่างสุดของ dataframe ด้วยฟังก์ชัน head และ tail ตามลำดับ เราสามารถกำหนดจำนวนแถวที่ต้องการแสดงผลได้เอง เช่น penguins.head(10)
penguins.head()
penguins.tail()


🔥 คอร์สเรียนฟรี Pandas Foundation สำหรับผู้เริ่มต้น (40 วีดีโอ)
Inspect DataFrame
ถ้าเราต้องการดู dimension ของ dataframe ว่ามีจำนวน columns, rows เท่าไหร่ เราสามารถเรียกดู attribute .shape
ของ object สังเกตว่า .shape
จะไม่มี ()
ถ้าต้องการเรียกดู information แบบเต็มๆของ dataframe ให้ใช้ฟังก์ชัน .info()
penguins.shape
penguins.info()
ด้านล่างคือ output ของ .info()
ที่ list รายชื่อคอลัมน์ทั้งหมดของ penguins dataframe จำนวน complete values (และ missing values) และ Dtype
คือประเภทข้อมูล
- object คือคอลัมน์ที่เป็น text, string
- float64 คือคอลัมน์ที่เป็นตัวเลข numeric แบบมีทศนิยมได้ (ถ้าเป็นตัวเลขจำนวนเต็มจะเรียกว่า int)
- ขนาดไฟล์ 18.9 KB ไม่ใหญ่มาก pandas เก็บข้อมูลใน memory ทำให้ประมวลผลได้เร็ว

จากรูปจะเห็นว่า dataframe เรามีคอลัมน์ที่สมบูรณ์ไม่มี null (missing values) เพียงสองคอลัมน์คือ species และ island => 344 non-null เท่ากับ 344 entries (rows) ของ dataframe พอดีเป๊ะ
Note – สำหรับ data.info()
ในเชิงเทคนิคเราเรียก .info()
ว่า method แปลว่าฟังก์ชันที่ถูกสร้างขึ้นมาสำหรับ object นั้นๆ (ในที่นี้คือ dataframe) ถ้าใครเคยเรียน OOP
คอนเซ็ปต์นี้น่าจะคุ้นเคยอยู่แล้ว แต่ถ้าใครยังไม่เคย ก็ไม่เป็นไรครับ 55+ บทความนี้เน้นตัวอย่างง่ายๆเลย
อีกฟังก์ชันนึงที่ใช้บ่อยมากคือ .describe()
ที่ใช้หาค่าสถิติเบื้องต้นของทุกคอลัมน์ใน dataframe
penguins.describe()

ก่อนจะจบ section นี้ เราสามารถลบทุก rows ที่มีค่า null หรือ missing values ได้ง่ายๆด้วยฟังก์ชัน .dropna()
เสร็จแล้วลองดู shape ของ dataframe อีกทีนะครับ
clean_penguins = penguins.dropna()
clean_penguins.shape
ตอนนี้ penguins เราจะเหลือแค่ 333 rows แล้ว เราลบไปทั้งหมด 11 rows ที่มีค่า null
Columns and Rows
Section นี้เรามาลองดูวิธีการจัดการ columns, rows กันบ้าง วิธีการเลือกคอลัมน์ dataframe ทำได้ง่ายๆแค่พิมพ์ชื่อ dataframe ตามด้วย [column_name]
แบบนี้
clean_penguins['species']
clean_penguins[['species', 'island', 'sex']]
ถ้าต้องการดึงหลายๆคอลัมน์ให้ใส่ชื่อคอลัมน์ที่ต้องการใน list

เราใช้ .rename()
เพื่อเปลี่ยนชื่อคอลัมน์ได้ โดย object ที่เราใส่ในฟังก์ชันจะเป็น dictionary ที่มี key = old_name และ value = new_name ตัวอย่างนี้ แอดจะลองเปลี่ยนชื่อคอลัมน์ sex -> gender
clean_penguins = clean_pengiuns.rename(columns = {'sex': 'gender'})

ถ้าต้องการ drop columns ก็ทำได้ง่ายๆด้วยฟังก์ชัน .drop()
ตัวอย่างนี้แอด drop สามคอลัมน์ [gender, body_mass_g, island] และ assign ค่าไปที่ dataframe ใหม่
small_penguins = clean_pengiuns.drop(columns = ['gender', 'body_mass_g', 'island'])

วิธีการฟิลเตอร์ dataframe ของ pandas ทำได้หลายวิธีมาก ที่นิยมใช้กันจะมีสามแบบคือ
- iloc[]
- loc[]
- query()
วิธีที่หนึ่ง iloc[]
ย่อมาจาก integer location based คือใส่เลข index เพื่อเลือกข้อมูลแถวที่ต้องการได้เลย ตัวอย่างนี้แอด slice rows 0-5 โดย index ใน python จะเริ่มที่เลขศูนย์
small_penguins.iloc[0:5]

Note – สังเกตว่าเลข index ในรูป output ด้านบนมันกระโดดข้ามเลข 3 เพราะ step ก่อนหน้านี้เรามี .dropna()
ไป เราสามารถ reset index ใหม่ด้วยฟังก์ชัน .reset_index()
วิธีที่สอง loc[]
ใช้ฟิลเตอร์ข้อมูลด้วยเงื่อนไขที่เราต้องการ ตัวอย่างนี้เราต้องการฟิลเตอร์เฉพาะ penguins ที่มี bill length ยาวกว่า 55 มม. ขึ้นไป ศึกษา syntax ได้ที่ code block นี้
small_penguins.loc[ small_penguins['bill_length_mm'] >= 55 ]

สังเกตว่า code ของ loc[]
จะค่อนข้างยาว เพราะเราต้องเขียนชื่อ dataframe small_penguins
ซ้ำสองรอบ เวลาฟิลเตอร์ dataframe แอดจะชอบใช้ฟังก์ชัน .query()
มากกว่า เพราะมัน intuitive และก็เขียนง่ายกว่า .loc()
เยอะเลย ทั้งสองแบบได้ผลลัพธ์เหมือนกัน
small_penguins.query("bill_length_mm >= 55")
และ tranformation สุดท้ายที่แอดจะสอนในบทความนี้คือการเรียงข้อมูลใน dataframe เราใช้ฟังก์ชัน .sort_values()
จากน้อยไปมาก หรือ set ascending = False เพื่อเรียงจากมากไปน้อย
small_penguins.sort_values(by = 'bill_length_mm', ascending = False)

ถ้าต้องการ keep transformation นี้ อย่าลืม assign ค่ากลับไปที่ dataframe ใหม่ หรือใช้ inplace=True
ตอนเขียนฟังก์ชันด้วยนะครับ
Write CSV File
หลังจากที่ทำ data transformation เสร็จแล้ว เราสามารถ write csv ด้วยฟังก์ชัน .to_csv()
ดาวน์โหลดและนำไฟล์ csv นี้ส่งต่อให้เพื่อนในทีมไปทำ analysis/ report ต่อได้เลย จบแล้ว ทำไมมันง่ายอย่างนี้ 55+
small_penguins.to_csv()

Pandas Document
โปรแกรมเมอร์เก่งๆ นอกจากเขียนโค้ดเก่งแล้ว ยังอ่าน document เก่งด้วย อันนี้เรื่องจริงเลย 555+

ถ้าใครอยากเรียนรู้ pandas มากกว่านี้ เราแนะนำให้ลองฝึกอ่าน official document ดูนะครับ ลอง copy code มาเล่นใน Google Colab ก็ได้ ยิ่งเราเห็นตัวอย่างมากขึ้นเท่าไหร่ ก็จะเขียนเป็นเร็วเท่านั้น
Function เยอะมาก จำไม่ได้เลยแอด ต้องฝึกยังไงดี?
พวกนี้ไม่ต้องจำเลย do not try to remember แต่ต้องฝึกใช้บ่อยๆครับ ลองหา dataset ใหม่ๆมาลองเล่นได้ โหลดขึ้น Google Colab แล้วลุยเลย เจอฟังก์ชันใหม่ๆ เขียนไม่เป็นก็เปิด Google ค้าบ 55+
Free Online Courses

สำหรับเพื่อนๆที่อยากศึกษาเพิ่มเติม ลองดูคอร์สฟรีที่เราสอน หรือของ Kaggle ได้เลยครับ
- DataRockie – Python for Non Programmers (ภาษาไทย)
- DataRockie – Pandas Foundation (ภาษาไทย)
- Kaggle – Intro to Pandas (ภาษาอังกฤษ)
คอร์สของเพจเราเริ่มสอนตั้งแต่ basic Python ใช้เวลาเรียนประมาณ 3 ชั่วโมง ถ้าใครยังไม่เคยเขียน Python มาก่อน แนะนำให้เริ่มจากคอร์สเรานะครับ เรียนกันบน Google Colab แต่ไม่มีใบเซอร์เหมือน Kaggle นะ 55+ แล้วพบกันในคอร์สเรียนนะครับ 👏