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

เมธอด Series ที่มีประโยชน์

ใช้ describe(), value_counts(), unique() และ map() เพื่อสรุปและแปลง Series ได้อย่างรวดเร็ว

บทเรียน 4 จาก 413 ขั้นตอน

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

สรุปอย่างรวดเร็วด้วย describe()

s.describe() สร้างสรุปทางสถิติด้วยการเรียกใช้เพียงครั้งเดียว ได้แก่ จำนวนข้อมูล ค่าเฉลี่ย ส่วนเบี่ยงเบนมาตรฐาน ค่าต่ำสุด เปอร์เซ็นไทล์ที่ 25 (Q1) มัธยฐาน (Q2) เปอร์เซ็นไทล์ที่ 75 (Q3) และค่าสูงสุด สำหรับ Series ที่เป็นข้อความ จะส่งคืนจำนวนข้อมูล จำนวนค่าที่ไม่ซ้ำ ค่าที่พบบ่อยที่สุด และความถี่แทน นี่เป็นวิธีที่รวดเร็วที่สุดในการทำความเข้าใจการกระจายของคอลัมน์เมื่อเริ่มสำรวจชุดข้อมูล

import pandas as pd

ages = pd.Series([25, 32, 19, 45, 28, 31, 22, 40])
print(ages.describe())
# count     8.000000
# mean     30.250000
# std       8.406...
# min      19.000000
# 25%      24.250000
# 50%      29.500000
# 75%      34.750000
# max      45.000000

value_counts() สำหรับตารางความถี่

s.value_counts() ส่งคืน Series ใหม่ที่ใช้ค่าที่ไม่ซ้ำเป็นดัชนี และใช้จำนวนครั้งที่พบค่าเหล่านั้นเป็นข้อมูล โดยเรียงจากจำนวนมากไปน้อย ส่ง normalize=True เพื่อรับสัดส่วนแทนจำนวนดิบ นี่เป็นสิ่งแรกที่ควรเรียกใช้กับคอลัมน์เชิงหมวดหมู่เพื่อทำความเข้าใจการกระจายของข้อมูล

import pandas as pd

colors = pd.Series(['red', 'blue', 'red', 'green', 'blue', 'red'])
print(colors.value_counts())
# red      3
# blue     2
# green    1
print(colors.value_counts(normalize=True).round(2))
# red      0.50  blue  0.33  green  0.17

unique() และ nunique()

s.unique() ส่งคืนอาร์เรย์ NumPy ของค่าที่แตกต่างกัน โดยเรียงตามลำดับที่พบครั้งแรก (ต่างจาก value_counts ที่เรียงตามความถี่) s.nunique() ส่งคืนจำนวนค่าที่แตกต่างกันเป็นจำนวนเต็ม หรือก็คือ จำนวนสมาชิกของคอลัมน์ ทั้งสองแบบจะข้าม NaN โดยค่าเริ่มต้น ใช้ nunique(dropna=False) หากต้องการนับ NaN เป็นค่าที่แตกต่างกันหนึ่งค่า

import pandas as pd

s = pd.Series(['apple', 'banana', 'apple', 'cherry', 'banana'])
print(s.unique())    # ['apple' 'banana' 'cherry']
print(s.nunique())   # 3

map() สำหรับการแปลงทีละองค์ประกอบ

s.map() ใช้ฟังก์ชัน พจนานุกรม หรือ Series อื่นกับทุกองค์ประกอบ เมื่อส่งพจนานุกรมเข้าไป แต่ละค่าจะถูกแทนที่ด้วยค่าที่สอดคล้องกันในพจนานุกรม ส่วนค่าที่ไม่มีอยู่ในพจนานุกรมจะกลายเป็น NaN เมื่อส่งฟังก์ชันเข้าไป ฟังก์ชันนั้นจะถูกใช้กับแต่ละองค์ประกอบ map เหมาะอย่างยิ่งสำหรับการเข้ารหัสป้ายกำกับเชิงหมวดหมู่ใหม่ หรือใช้ตารางค้นหา

import pandas as pd

grades = pd.Series(['A', 'B', 'C', 'A', 'B'])
gpa = {'A': 4.0, 'B': 3.0, 'C': 2.0}
print(grades.map(gpa))
# 0    4.0
# 1    3.0
# 2    2.0
# 3    4.0
# 4    3.0

apply() สำหรับฟังก์ชันกำหนดเอง

s.apply(func) ใช้ฟังก์ชันที่เรียกใช้งานได้ของ Python กับแต่ละองค์ประกอบ แล้วรวบรวมผลลัพธ์ ต่างจาก map() ตรงที่ออกแบบมาสำหรับฟังก์ชันที่ซับซ้อนกว่า ซึ่งอาจส่งคืนออบเจกต์ที่ไม่ใช่ค่าเดี่ยว สำหรับการแปลงทีละองค์ประกอบอย่างง่าย ควรเลือกใช้ map() หรือนิพจน์แบบเวกเตอร์ และใช้ apply() เมื่อตรรกะซับซ้อนเกินกว่าจะแปลงเป็นการดำเนินการแบบเวกเตอร์ได้โดยตรง

import pandas as pd

sentences = pd.Series(['Hello world', 'Pandas is great', 'Data science'])
word_counts = sentences.apply(lambda x: len(x.split()))
print(word_counts)
# 0    2
# 1    3
# 2    2

sort_values() และ sort_index()

s.sort_values() ส่งคืน Series ที่เรียงตามค่าข้อมูลจากน้อยไปมาก (ส่ง ascending=False หากต้องการเรียงจากมากไปน้อย) ส่วน s.sort_index() จะเรียงตามป้ายกำกับดัชนี โดยค่าเริ่มต้น ทั้งสองแบบจะไม่แก้ไข Series เดิม ส่ง inplace=True เพื่อแก้ไขข้อมูลโดยตรง (แต่ไม่ค่อยแนะนำในโค้ด Pandas สมัยใหม่ที่เชื่อมการดำเนินการหลายขั้น)

import pandas as pd

s = pd.Series([30, 10, 50, 20], index=['d', 'a', 'c', 'b'])
print(s.sort_values())
# a    10
# b    20
# d    30
# c    50
print(s.sort_index())
# a    10
# b    20
# c    50
# d    30

isin() สำหรับตรวจสอบการเป็นสมาชิก

s.isin(values) คืนค่า boolean Series ที่เป็น True ในตำแหน่งที่สมาชิกอยู่ในรายการหรือเซตที่ระบุ วิธีนี้อ่านเข้าใจง่ายกว่าการใช้เงื่อนไข | หลายรายการ และทำงานได้เร็วกว่าอย่างเห็นได้ชัดเมื่อใช้กับเซตขนาดใหญ่ โดยมักใช้เพื่อกรองแถวที่อยู่ในกลุ่มใดกลุ่มหนึ่งโดยเฉพาะ หรือทำเครื่องหมายระเบียนที่ตรงกับรายการสำหรับค้นหา

import pandas as pd

countries = pd.Series(['DE', 'US', 'FR', 'UK', 'US', 'DE'])
nordics = ['DE', 'FR']
print(countries.isin(nordics))
# 0     True  1    False  2     True  3    False  4    False  5     True
print(countries[countries.isin(nordics)])

between() สำหรับกรองตามช่วง

s.between(left, right, inclusive='both') คืนค่า boolean Series ที่เป็น True เมื่อค่าอยู่ภายในช่วง [left, right] โดยค่าเริ่มต้นจะรวมปลายทั้งสองด้านไว้ด้วย วิธีนี้กระชับกว่าการเขียน (s >= left) & (s <= right) และสื่อเจตนาได้อย่างชัดเจน เหมาะสำหรับกรองช่วงตัวเลข เช่น กลุ่มอายุหรือช่วงราคา

import pandas as pd

scores = pd.Series([45, 72, 83, 91, 55, 68])
pass_mask = scores.between(60, 100)
print(pass_mask)
# 0    False  1    True  2    True  3    True  4    False  5    True
print(scores[pass_mask].values)  # [72 83 91 68]

head() และ tail() สำหรับตรวจสอบข้อมูลอย่างรวดเร็ว

s.head(n) คืนค่าองค์ประกอบ n รายการแรก (ค่าเริ่มต้นคือ 5) และ s.tail(n) คืนค่า n รายการสุดท้าย ทั้งสองเมธอดนี้ใช้เป็นประจำเมื่อสำรวจข้อมูล เพื่อดูตัวอย่างช่วงต้นและช่วงท้ายของ Series ขนาดยาวโดยไม่ต้องพิมพ์ข้อมูลหลายพันแถว เมธอดเหล่านี้คืนค่า Series ใหม่ (ส่วนย่อยของข้อมูล) จึงไม่แก้ไขข้อมูลต้นฉบับ

import pandas as pd

s = pd.Series(range(100))
print(s.head(3))
# 0    0
# 1    1
# 2    2
print(s.tail(3))
# 97    97
# 98    98
# 99    99

rename() สำหรับเปลี่ยนชื่อ

s.rename('new_name') คืนค่า Series ใหม่ที่มีแอตทริบิวต์ name ต่างจากเดิม หากต้องการเปลี่ยนชื่อป้ายกำกับดัชนี ให้ส่งพจนานุกรมหรือฟังก์ชัน เช่น s.rename(index={'old': 'new'}) การเปลี่ยนชื่อมีความสำคัญก่อนรวม Series หลายรายการเป็น DataFrame เพราะค่า name ของ Series จะกลายเป็นหัวคอลัมน์ ควรใช้การเปลี่ยนชื่อแทนการกำหนดค่าดิบใหม่เสมอ

import pandas as pd

s = pd.Series([1, 2, 3], index=['a', 'b', 'c'], name='original')
renamed = s.rename('updated').rename(index={'a': 'x', 'b': 'y', 'c': 'z'})
print(renamed)
# x    1
# y    2
# z    3
# Name: updated

idxmin() และ idxmax()

s.idxmin() คืนค่า ป้ายกำกับดัชนีของค่าต่ำสุด และ s.idxmax() คืนค่าป้ายกำกับของค่าสูงสุด วิธีนี้มีประโยชน์กว่า argmin/argmax เมื่อดัชนีมีป้ายกำกับที่สื่อความหมาย เช่น วันที่หรือชื่อผลิตภัณฑ์ เพราะคุณจะได้รับตัวระบุจริง ไม่ใช่เพียงหมายเลขตำแหน่ง

import pandas as pd

scores = pd.Series({'Alice': 88, 'Bob': 73, 'Carol': 95, 'Dan': 60})
print('Best:', scores.idxmax(), scores.max())   # Carol 95
print('Worst:', scores.idxmin(), scores.min())  # Dan   60

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

ทดสอบความเข้าใจเกี่ยวกับเมธอดที่มีประโยชน์ของ Series จากบทเรียนนี้

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

ในบทเรียนนี้ คุณได้เรียนรู้ว่า describe() ให้สรุปข้อมูลทางสถิติได้ด้วยการเรียกใช้เพียงครั้งเดียว value_counts() สร้างตารางความถี่ของค่าที่ไม่ซ้ำกัน และ map() แปลงค่าด้วยพจนานุกรม ส่วน apply() เรียกใช้ฟังก์ชันที่กำหนดเองกับแต่ละองค์ประกอบ บทถัดไปเราจะเริ่มทำงานกับ DataFrame ซึ่งเป็นโครงสร้างหลักแบบสองมิติสำหรับการวิเคราะห์ข้อมูลด้วย Pandas

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

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

บทเรียน “เมธอด Series ที่มีประโยชน์” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “เมธอด Series ที่มีประโยชน์”

ใช้ describe(), value_counts(), unique() และ map() เพื่อสรุปและแปลง Series ได้อย่างรวดเร็ว คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “เมธอด Series ที่มีประโยชน์” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การสร้าง Series
  2. การเข้าถึงตามป้ายกำกับและตามตำแหน่ง
  3. การดำเนินการแบบเวกเตอร์บน Series
  4. เมธอด Series ที่มีประโยชน์
← กลับไปที่ Pandas & NumPy Academy