0Pricing
Learn AI with Python · บทเรียน

การผสานและการเชื่อมข้อมูลขั้นสูง

pd.merge() ด้วย how, on, left_on/right_on, suffixes และ merge_asof สำหรับการเชื่อมตามเวลา

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

การรวม DataFrames

pd.merge ใช้เชื่อม DataFrames สองชุดด้วยคีย์ร่วม เช่นเดียวกับ SQL JOIN การทำความเข้าใจตัวเลือก how ให้ดีเป็นสิ่งสำคัญสำหรับการทำงานกับข้อมูลเชิงสัมพันธ์

import pandas as pd
left = pd.DataFrame({"id": [1, 2, 3], "name": ["a", "b", "c"]})
right = pd.DataFrame({"id": [2, 3, 4], "score": [90, 80, 70]})

การเชื่อมภายใน (ค่าเริ่มต้น)

how="inner" จะเก็บเฉพาะคีย์ที่มีอยู่ใน BOTH ตาราง ค่าเริ่มต้นคือวิธีนี้

print(pd.merge(left, right, on="id", how="inner"))
#    id name  score
# 0   2    b     90
# 1   3    c     80

การเชื่อมด้านซ้าย

how="left" จะเก็บทุกแถวจากตารางด้านซ้าย ส่วนคอลัมน์ด้านขวาที่จับคู่ไม่ได้จะกลายเป็น NaN วิธีนี้เป็นการเชื่อมที่ใช้บ่อยที่สุดในการวิเคราะห์ข้อมูล

print(pd.merge(left, right, on="id", how="left"))
#    id name  score
# 0   1    a    NaN
# 1   2    b   90.0
# 2   3    c   80.0

การเชื่อมภายนอก

how="outer" จะเก็บคีย์ทั้งหมดจากทั้งสองฝั่ง และเติมช่องว่างด้วย NaN ใช้เพื่อดูผลรวมของระเบียนทั้งหมด

print(pd.merge(left, right, on="id", how="outer"))
# includes id 1 (no score) and id 4 (no name)

การเชื่อมเมื่อชื่อคอลัมน์ต่างกัน

เมื่อคอลัมน์คีย์มีชื่อต่างกัน ให้ใช้ left_on และ right_on แทน on

r2 = right.rename(columns={"id": "user_id"})
print(pd.merge(left, r2, left_on="id", right_on="user_id"))

คำต่อท้ายสำหรับคอลัมน์ที่ซ้ำกัน

หากทั้งสองตารางมีชื่อคอลัมน์ที่ไม่ใช่คีย์เหมือนกัน ไลบรารีแพนด้าจะเติม _x และ _y ให้ท้ายชื่อคอลัมน์ คุณสามารถกำหนดค่าใหม่ด้วย suffixes เพื่อให้ชัดเจนขึ้น

a = pd.DataFrame({"id": [1], "val": [10]})
b2 = pd.DataFrame({"id": [1], "val": [99]})
print(pd.merge(a, b2, on="id", suffixes=("_old", "_new")))

คอลัมน์ตัวบ่งชี้

indicator=True จะเพิ่มคอลัมน์ _merge เพื่อแสดงแหล่งที่มาของแต่ละแถว ได้แก่ มีเฉพาะฝั่งซ้าย มีเฉพาะฝั่งขวา หรือมีอยู่ทั้งสองฝั่ง มีประโยชน์อย่างมากสำหรับตรวจสอบการเชื่อม

print(pd.merge(left, right, on="id", how="outer", indicator=True))
# _merge tells you where each row came from

การวินิจฉัยปัญหาการเชื่อม

การกรองด้วยคอลัมน์ตัวบ่งชี้จะช่วยเผยให้เห็นคีย์ที่จับคู่ไม่ได้อย่างรวดเร็ว ซึ่งเป็นสาเหตุทั่วไปที่ทำให้ข้อมูลถูกตัดออกโดยไม่รู้ตัว

m = pd.merge(left, right, on="id", how="outer", indicator=True)
print(m[m["_merge"] != "both"])   # rows that did not match

merge_asof สำหรับการเชื่อมตามเวลา

pd.merge_asof เชื่อมตารางโดยใช้คีย์ที่ใกล้ที่สุดแทนการจับคู่ที่ตรงกันทุกประการ เครื่องมือนี้ออกแบบมาโดยเฉพาะสำหรับจัดแนวอนุกรมเวลา เช่น จับคู่การซื้อขายแต่ละรายการกับใบเสนอราคาล่าสุดก่อนหน้า ตารางข้อมูลทั้งสองต้องเรียงลำดับตามคีย์

trades = pd.DataFrame({"time": [1, 3, 7], "price": [10, 11, 12]})
quotes = pd.DataFrame({"time": [0, 2, 5], "bid": [9, 10, 11]})
print(pd.merge_asof(trades, quotes, on="time"))

ทิศทางของ merge_asof

โดยค่าเริ่มต้น merge_asof จะค้นหาแบบ BACKWARD (คีย์ล่าสุดที่อยู่ก่อนหน้าหรือมีค่าเท่ากัน) ใช้ direction="forward" หรือ "nearest" เพื่อเปลี่ยนกฎการจับคู่

print(pd.merge_asof(trades, quotes, on="time", direction="nearest"))

การเลือกการเชื่อมที่เหมาะสม

ใช้ inner เพื่อเก็บไว้เฉพาะรายการที่จับคู่กันได้ ใช้ left เพื่อเพิ่มข้อมูลให้ตารางหลัก ใช้ outer เพื่อรวมคีย์ทั้งหมด และใช้ merge_asof สำหรับการเชื่อมตามเวลาที่จับคู่คีย์โดยประมาณ

ตรวจสอบอย่างรวดเร็ว

ทดสอบความรู้เกี่ยวกับการเชื่อมตาราง

สรุปทบทวน

เครื่องมือสำหรับการรวมตาราง:

  • how= inner / left / outer ควบคุมว่าคีย์ใดจะถูกเก็บไว้
  • on เทียบกับ left_on/right_on สำหรับคอลัมน์คีย์
  • suffixes ช่วยแยกชื่อที่ซ้ำกันให้ชัดเจน
  • indicator=True ช่วยตรวจสอบแหล่งที่มาของแถว
  • pd.merge_asof สำหรับการเชื่อมตามเวลาที่ใช้คีย์ใกล้เคียง (ต้องเรียงลำดับก่อน)

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

บทเรียน “การผสานและการเชื่อมข้อมูลขั้นสูง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การผสานและการเชื่อมข้อมูลขั้นสูง”

pd.merge() ด้วย how, on, left_on/right_on, suffixes และ merge_asof สำหรับการเชื่อมตามเวลา คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่

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

บทเรียน “การผสานและการเชื่อมข้อมูลขั้นสูง” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม

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

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

  1. GroupBy และการรวมข้อมูล
  2. ตารางไพวอตและตารางแจกแจงไขว้
  3. การผสานและการเชื่อมข้อมูลขั้นสูง
  4. อนุกรมเวลาใน Pandas
← กลับไปที่ Learn AI with Python