การผสานและการเชื่อมข้อมูลขั้นสูง
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 matchmerge_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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- GroupBy และการรวมข้อมูล
- ตารางไพวอตและตารางแจกแจงไขว้
- การผสานและการเชื่อมข้อมูลขั้นสูง
- อนุกรมเวลาใน Pandas