สำหรับบทความนี้เราจะมาพูดกันถึงเรื่องการเชื่อมข้อมูล DataFrame ใน pandas ซึ่งจะเป็นเนื้อหาเสริมสำหรับซีรี่ย์ pandas ที่เคยได้ทำเป็นคลิปสอนเอาไว้ เพื่อศึกษาเพิ่มเติมเกี่ยวกับเรื่อง DataFrame เนื้อหาส่วนนี้จะน่าสนใจเพียงไหน สามารถอ่านได้ในบทความนี้เลยครับ
วิดีโอแนะนำ( YouTube): Python Pandas - dataframe, CSV, Excel ฉบับใช้งานจริง
ต่อมาให้ทำการอิมพอร์ต pandas เข้ามาใช้งาน
import pandas as pd
เมื่อเปิด Jupyter Notebook พร้อมทั้งอิมพอร์ตไลบรารี่ pandas เข้ามาเรียบร้อยเเล้วก็มาลุยกันเลยครับ Hey we go !!
studentId thai1 thai2 1 7 5 2 8 6 3 6 5 4 7 7 5 5 8 6 7 9 7 8 9
เป็นข้อมูลที่แสดงถึงคะเเนนการสอบของวิชาภาษาไทยด้วยกันทั้งหมด 2 ครั้ง
ชุดที่ 2
studentId math1 math2 1 8 3 2 9 4 3 9 3 4 9 4 5 7 5 6 6 6 7 5 7
เป็นข้อมูลที่แสดงถึงคะเเนนการสอบของวิชาคณิตศาสตร์ด้วยกันทั้งหมด 2 ครั้ง
A = pd.read_csv('data1.txt', sep='')
B = pd.read_csv('data2.txt', sep='')
pd.merge(A, B)
จะเห็นว่าพอรวมกันแล้วได้ DataFrame ที่มีความเปลี่ยนเเปลงไป ซึ่งในส่วนของ Index เเละ คอลัมน์ studentId จะไม่ถูกเปลี่ยนแปลง สามารถบ่งบอกได้ว่า ในส่วนที่ไม่ถูกเปลี่ยนแปลงนั้นคือจุดที่ใช้ในการเชื่อมต่อ ซึ่งปกติถ้าไม่ได้ระบุอะไรนอกเหนือจาก DataFrame ที่จะใช้เชื่อมคอลัมน์ที่มีข้อมูลซ้ำกันในทั้งสอง DataFrame จะถูกใช้เป็นตัวเชื่อม แต่หากระบุไว้ในคอลัมน์ที่ถูกใช้เชื่อมจะมีเพียงอันเดียว เช่น ผมจะทำการสร้างตารางขึ้นมาใหม่ โดยอ้างอิงจาก DataFrame ชุดที่ 2 โดยจะเพิ่มคอลัมน์ thai2 จาก DataFrame ชุดที่ 1 เพื่อใช้ในการเชื่อมต่อแบบระบุคอลัมน์
studentId math1 math2 thai2 1 8 3 5 2 9 4 6 3 9 3 5 4 9 4 7 5 7 5 8 6 6 6 9 7 5 7 9
เป็นข้อมูลที่แสดงถึงคะเเนนการสอบของวิชาคณิตศาสตร์ 2 ครั้งรวมกับภาษาไทยครั้งที่ 2
จากนั้นเรียกใช้งานด้วย pd.read_csv พร้อมกำหนดตัวแปร จากนั้นให้ทำการเชื่อม
เเบบเดิมโดยเพิ่มคำสั่ง on เข้าไป (ซึ่งผมจะกำหนดตัวแปรเป็น C ) ดังรูปภาพด้านล่าง
pd.merge(A, C, on='thai2')
ซึ่งจะเห็นได้ว่าในครั้งนี้มีการกำหนดจุดให้เชื่อมเพียงคอลัมน์เดียวจึงทำให้คอลัมน์อื่นที่มีข้อมูลซ้ำกันถูกเปลี่ยนแปลง นั่นคือคอลัมน์ studentId โดยถูกเติมชื่อท้ายให้โดยอัตโนมัติ
pd.merge(A, C, on='thai2',suffixes=[' *-*', ' -3-'])
รูปแบบของการเชื่อมโยงของ DataFrame
ส่วนใหญ่นั้นต่างมีค่าเท่ากันหมด จริง ๆ แล้วไม่จำเป็นต้องเป็นเเบบนั้นก็ได้ ใน DataFrame
หนึ่งอาจมีค่าที่ในอีก DataFrame ไม่มีอยู่ ในตัวอย่างที่ผ่านมานั้นข้อมูลในคอลัมน์ที่ใช้เชื่อมจากทั้ง 2 DataFrameตัวอย่าง ผมจะเริ่มเเก้ไขข้อมูลใน DataFrame ชุดที่ 1 และ 2 โดยจะทำการเปลี่ยนเลขของคอลัมน์ studentId ให้ข้อมูลของทั้ง 1 เเละ 2 มีความเเตกต่างกัน เช่น
ชุดที่ 1 ที่ถูกเเก้ไขstudentId thai1 thai2 1 7 5 2 8 6 3 6 5 4 7 7 5 5 8 7 7 9 8 8 9ชุดที่ 2 ที่ถูกเเก้ไขstudentId math1 math2 1 8 3 2 9 4 3 9 3 4 9 4 5 7 5 7 6 6 9 5 7
เมื่อทำการเชื่อม DataFrame แล้วจะได้ผลลัพธ์ดังรูปภาพด้านล่าง
pd.merge(A, B)
จะเห็นได้ว่าข้อมูลที่ถูกนำมาเชื่อมนั้นจะต้องมีตัวที่ซ้ำกันอยู่ในคอลัมน์ที่จะใช้เชื่อมกันในครั้งนั้น แต่ถ้าหากว่าต้องการแสดงในส่วนที่ขาดหายไปให้ใช้คำสั่ง how='outer' เพิ่มเข้าไปดังรูปด้านล่าง
pd.merge(A, B, how='outer')
ไม่จำเป็นว่าสองคอลัมน์จากสองตารางที่เอามาเชื่อมกันจะมีค่าชื่อ ที่เหมือนกันเสมอไป ในกรณีที่ต่างกันแบบนี้จะต้องกำหนดชื่อคอลัมน์ที่ต้องการเชื่อมโดยใช้คำสั่ง left_on='ชื่อ column' ใน Dataframe ด้านซ้าย และ right_on='ชื่อ column' ใน DataFrame ด้านขวาตัวอย่าง ผมจะทำการเปลี่ยนชื่อคอลัมน์ student ใน DataFrame ที่ 2 เป็น 'รหัสนักศึกษา'
ชุดที่ 2 ที่ถูกเเก้ไขรหัสนักศึกษา math1 math2 1 8 3 2 9 4 3 9 3 4 9 4 5 7 5 6 6 6 7 5 7
ซึ่งผลลัพธ์ที่จะได้นั้นคอลัมน์จะถูกแสดงผลออกมาทั้ง 2 ซึ่งจะมีข้อมูลด้านในเหมือนกันดังรูปด้านล่าง
pd.merge(A, B, left_on='studentId', right_on='รหัสนึกศึกษา')
สุดท้ายนี่เป็นคำสั่งที่ค่อนข้างที่จะต้องใช้บ่อยมาก นั่นคือการตั้งค่า Index โดยจะใช้คำสั่ง set_index และ inplace=True เพื่อให้ค่าที่ตั้งไว้เป็นฟอร์แมตนี้แบบถาวร ดังรูปภาพด้านล่าง
pd.merge(A, B, left_on='studentId', right_on='รหัสนักศึกษา') a.set_index('รหัสนักศึกษา', inplace=True)
สามารถติดตามหรือศึกษาเพิ่มเติมได้ใน Pandas ซีรี่ย์ ทางช่องยูทูป stackpython
สอน pandas Ep.1 - Introduction
สอน pandas Ep.2 - DataFrame เบื้องต้น
สอน pandas Ep.3 - DataFrame (ต่อ)
สอน pandas Ep.4 - Graph
สอน pandas Ep.5 - การอ่านข้อมูลจาก website
สอน pandas Ep.6 - Columns
สอน pandas Ep.7 - Columns (จบ)
Nu STACKPYTHON
Follow us on
Medium: STACKPYTHON
Youtube: STACKPYTHON
Facebook: STACKPYTHON
| Like | Comment | Share | >> STACKPYTHON
กิจกรรมที่กำลังจะมาถึง
ไม่พลาดกิจกรรมเด็ด ๆ ที่น่าสนใจ
Event นี้จะเริ่มขึ้นใน April 25, 2023
รายละเอียดเพิ่มเติม/สมัครเข้าร่วมคอร์สเรียนไพธอนออนไลน์ที่เราได้รวบรวมและได้ย่อยจากประสบการณ์จริงและเพื่อย่นระยะเวลาในการเรียนรู้ ลองผิด ลองถูกด้วยตัวเองมาให้แล้ว เพราะเวลามีค่าเป็นอย่างยิ่ง พร้อมด้วยการซัพพอร์ตอย่างดี