การดำเนินการแบบเวกเตอร์บน Series
คำนวณระหว่าง Series สองชุด จัดแนวดัชนีโดยอัตโนมัติ และเติมค่า NaN ให้ค่าที่จัดแนวแล้วแต่ขาดหาย
การดำเนินการแบบเวกเตอร์บน Series เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้การดำเนินการแบบเวกเตอร์
เช่นเดียวกับ NumPy, Pandas Series รองรับ การดำเนินการแบบเวกเตอร์ ซึ่งใช้การคำนวณทางคณิตศาสตร์ การเปรียบเทียบ และฟังก์ชันกับทุกองค์ประกอบโดยไม่ต้องใช้ลูปของ Python วิธีนี้ช่วยให้โค้ดกระชับและทำงานได้รวดเร็ว ภายในแต่ละการดำเนินการจะเรียกใช้กระบวนการระดับ C ของ NumPy แต่ Pandas ยังมีข้อดีสำคัญเพิ่มเติมคือ การจัดแนวดัชนีโดยอัตโนมัติ ก่อนดำเนินการ
import pandas as pd
revenue = pd.Series([1000, 2000, 1500], index=['Jan', 'Feb', 'Mar'])
tax_rate = 0.2
net = revenue * (1 - tax_rate) # vectorized -- no loop
print(net)การคำนวณระหว่าง Series สองชุด
เมื่อคุณบวก ลบ คูณ หรือหาร Series สองชุด Pandas จะ จัดแนวตามป้ายกำกับดัชนี ก่อน เฉพาะตำแหน่งที่ Series ทั้งสองมีป้ายกำกับตรงกันเท่านั้นจึงจะได้ผลลัพธ์ ส่วนป้ายกำกับที่ไม่ตรงกันจะให้ค่า NaN พฤติกรรมนี้ช่วยป้องกันข้อผิดพลาดที่ซ่อนอยู่จากข้อมูลจัดแนวไม่ตรงกัน เช่น การนำตัวเลขของเดือนมกราคมจากแหล่งข้อมูลสองแห่งมาบวกกัน ทั้งที่ข้อมูลถูกเก็บไว้คนละลำดับ
import pandas as pd
a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])
print(a + b)
# w NaN
# x NaN
# y 21.0
# z 32.0การเติม NaN ในการดำเนินการที่มีการจัดแนว
เพื่อหลีกเลี่ยงการแพร่ต่อของ NaN ในการดำเนินการที่จัดแนวไม่ตรงกัน ให้ใช้เมธอดการคำนวณ เช่น .add(), .sub(), .mul() และ .div() ร่วมกับพารามิเตอร์ fill_value= พารามิเตอร์นี้จะแทนค่าที่กำหนดให้กับป้ายกำกับที่ขาดหายไปใน Series ชุดใดชุดหนึ่งก่อนดำเนินการ โดยทั่วไปมักใช้ 0 สำหรับการบวก และ 1 สำหรับการคูณ
import pandas as pd
a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])
result = a.add(b, fill_value=0)
print(result)
# w 3.0
# x 10.0
# y 21.0
# z 32.0การคำนวณค่าคงที่กับ Series
การคำนวณกับค่าคงที่จะใช้การดำเนินการกับทุกองค์ประกอบ และสร้าง Series ใหม่ที่มีดัชนีเดิม นี่คือรูปแบบพื้นฐานที่สุดของการทำงานแบบเวกเตอร์: s + 5, s * 100, s ** 2 การคำนวณกับค่าคงที่จะไม่สร้าง NaN และใช้สำหรับการแปลงหน่วย การปรับมาตรฐาน และการเลื่อนค่าอนุกรมเวลา
import pandas as pd
prices_eur = pd.Series([1.0, 2.5, 4.0], index=['a', 'b', 'c'])
exchange = 1.08
prices_usd = prices_eur * exchange
print(prices_usd.round(2))
# a 1.08
# b 2.70
# c 4.32การใช้ ufunc ของ NumPy กับ Series
ufunc ของ NumPy ทำงานร่วมกับ Pandas Series ได้อย่างราบรื่น และส่งคืน Series ที่มีดัชนีเดิม ซึ่งหมายความว่าคุณสามารถเรียก np.sqrt(s), np.log1p(s) หรือ np.exp(s) กับ Series ได้โดยตรง โดยไม่ต้องแปลงเป็นอาร์เรย์ก่อน ผลลัพธ์จะเป็น Series ใหม่ที่คงป้ายกำกับเดิมไว้
import pandas as pd
import numpy as np
s = pd.Series([0, 1, 4, 9, 16], index=list('abcde'))
print(np.sqrt(s))
# a 0.0
# b 1.0
# c 2.0
# d 3.0
# e 4.0การดำเนินการเปรียบเทียบกับ Series
ตัวดำเนินการเปรียบเทียบ (==, !=, >, <, >=, <=) จะส่งคืน Series แบบบูลีนทีละองค์ประกอบ สิ่งเหล่านี้เป็นพื้นฐานสำหรับการกรอง โดยส่ง Series แบบบูลีนให้กับ .loc เพื่อเลือกแถวที่ตรงกัน เมื่อเปรียบเทียบ Series สองชุด Pandas จะจัดแนวตามดัชนีด้วย
import pandas as pd
s = pd.Series([3, 7, 2, 9, 1], index=list('abcde'))
print(s > 4)
# a False
# b True
# c False
# d True
# e False
print(s[s > 4]) # b:7 d:9การเชื่อมการดำเนินการแบบเวกเตอร์
เนื่องจากแต่ละการดำเนินการส่งคืน Series ใหม่ คุณจึงสามารถเชื่อมการแปลงหลายรายการไว้ในนิพจน์เดียวได้ ทำให้อ่านง่ายและไม่ต้องสร้างตัวแปรชั่วคราวที่ไม่จำเป็น สำหรับกระบวนการที่ซับซ้อน ให้แบ่งการเชื่อมออกเป็นหลายบรรทัดโดยใช้วงเล็บ การเชื่อมในลักษณะนี้เทียบเท่ากับการเขียนโปรแกรมเชิงฟังก์ชันที่ใช้ข้อมูลเปลี่ยนแปลงไม่ได้ใน Pandas
import pandas as pd
import numpy as np
raw_scores = pd.Series([55, 80, 45, 90, 72])
normalised = (raw_scores - raw_scores.min()) / (raw_scores.max() - raw_scores.min())
print(normalised.round(2))
# 0 0.22
# 1 0.78
# 2 0.00
# 3 1.00
# 4 0.60การจัดการ NaN ในการดำเนินการแบบเวกเตอร์
NaN แพร่ต่อกันได้: การคำนวณทางคณิตศาสตร์ใด ๆ ที่มี NaN เป็นส่วนประกอบจะให้ผลลัพธ์เป็น NaN ใช้ s.fillna(value) เพื่อแทนค่าก่อนดำเนินการ หรือใช้พารามิเตอร์ skipna=True กับเมธอดการรวมค่า ฟังก์ชัน pd.isna(s) จะส่งคืน Series แบบบูลีนที่ระบุตำแหน่งของ NaN ใช้ฟังก์ชันนี้ตรวจสอบข้อมูลก่อนคำนวณสถิติ
import pandas as pd
import numpy as np
s = pd.Series([1.0, np.nan, 3.0, np.nan, 5.0])
print(s + 10)
# 0 11.0 2 13.0 4 15.0 -- NaN stays NaN
print(s.fillna(0) + 10)
# 0 11.0 1 10.0 2 13.0 3 10.0 4 15.0abs(), clip() และ round() บน Series
Pandas Series มีเมธอดที่คล้าย NumPy ให้ใช้โดยตรงหลายรายการ ได้แก่ s.abs(), s.clip(lower, upper) และ s.round(decimals) ซึ่งทั้งหมดจะส่งคืน Series ใหม่ที่ใช้การแปลงกับแต่ละองค์ประกอบ เมธอดเหล่านี้เทียบเท่ากับการเรียกใช้ ufunc ของ NumPy แต่ใช้รูปแบบเมธอด และยังคงดัชนีและชื่อของ Series ไว้
import pandas as pd
s = pd.Series([-2.5, 1.3, -0.7, 4.9, -3.1])
print(s.abs()) # [2.5 1.3 0.7 4.9 3.1]
print(s.clip(-2, 2)) # [-2. 1.3 -0.7 2. -2. ]
print(s.round(0)) # [-2. 1. -1. 5. -3.]pct_change() สำหรับอัตราการเติบโต
s.pct_change() คำนวณเปอร์เซ็นต์การเปลี่ยนแปลงระหว่างองค์ประกอบที่อยู่ติดกัน: (ค่าปัจจุบัน - ค่าก่อนหน้า) / ค่าก่อนหน้า องค์ประกอบแรกจะเป็น NaN เนื่องจากไม่มีค่าก่อนหน้า นี่เป็นการดำเนินการมาตรฐานสำหรับคำนวณอัตราการเติบโตเมื่อเทียบกับเดือนก่อน ผลตอบแทนรายวันในงานการเงิน และคุณลักษณะอัตราการเปลี่ยนแปลงสำหรับแบบจำลองอนุกรมเวลา
import pandas as pd
monthly_revenue = pd.Series([100, 120, 110, 140],
index=['Q1', 'Q2', 'Q3', 'Q4'])
growth = monthly_revenue.pct_change()
print(growth.round(3))
# Q1 NaN
# Q2 0.200
# Q3 -0.083
# Q4 0.273cumsum() และ cumprod() บน Series
s.cumsum() ส่งคืน Series ของผลรวมสะสม และ s.cumprod() ส่งคืนผลคูณสะสม ทั้งสองใช้สำหรับคำนวณรายได้สะสม ผลตอบแทนการลงทุนแบบทบต้น หรือจำนวนคำสะสม โดยยังคงป้ายกำกับดัชนีเดิมไว้ ทำให้แสดงกราฟอนุกรมสะสมตามเวลาหรือหมวดหมู่ได้ง่าย
import pandas as pd
daily_sales = pd.Series([100, 150, 80, 200],
index=['Mon', 'Tue', 'Wed', 'Thu'])
print(daily_sales.cumsum())
# Mon 100
# Tue 250
# Wed 330
# Thu 530ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับการดำเนินการแบบเวกเตอร์บน Series จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า ตัวดำเนินการทางคณิตศาสตร์ใช้กับแต่ละองค์ประกอบของ Series ได้โดยไม่ต้องใช้ลูป Pandas จะจัดแนว Series สองชุดตามป้ายกำกับดัชนีโดยอัตโนมัติก่อนดำเนินการ และใส่ NaN ในตำแหน่งที่ไม่ตรงกัน และ เมธอดอย่าง fill_value, pct_change และ cumsum ช่วยขยายการดำเนินการแบบเวกเตอร์สำหรับงานวิเคราะห์ บทถัดไปเราจะสำรวจเมธอดที่มีประโยชน์ของ Series เช่น describe, value_counts และ map เพื่อสรุปข้อมูลอย่างรวดเร็ว
คำถามที่พบบ่อย
บทเรียน “การดำเนินการแบบเวกเตอร์บน Series” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การดำเนินการแบบเวกเตอร์บน Series” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การดำเนินการแบบเวกเตอร์บน Series”
คำนวณระหว่าง Series สองชุด จัดแนวดัชนีโดยอัตโนมัติ และเติมค่า NaN ให้ค่าที่จัดแนวแล้วแต่ขาดหาย คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การดำเนินการแบบเวกเตอร์บน Series” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้าง Series
- การเข้าถึงตามป้ายกำกับและตามตำแหน่ง
- การดำเนินการแบบเวกเตอร์บน Series
- เมธอด Series ที่มีประโยชน์