Pandas DataFrame เชื่อมต่อข้อมูล

ในบทความนี้เราจะมาทดสอบและทำการเชื่อมต่อข้อมูลด้วย pandas DataFrame กันครับ

Pandas DataFrame เชื่อมต่อข้อมูล

สำหรับบทความนี้เราจะมาพูดกันถึงเรื่องการเชื่อมข้อมูล DataFrame ใน pandas ซึ่งจะเป็นเนื้อหาเสริมสำหรับซีรี่ย์ pandas ที่เคยได้ทำเป็นคลิปสอนเอาไว้ เพื่อศึกษาเพิ่มเติมเกี่ยวกับเรื่อง DataFrame เนื้อหาส่วนนี้จะน่าสนใจเพียงไหน สามารถอ่านได้ในบทความนี้เลยครับ

Software & Tools

วิดีโอแนะนำ( YouTube): Python Pandas - dataframe, CSV, Excel ฉบับใช้งานจริง

Jupyter Notebook & import pandas

และก่อนที่จะเริ่มใช้งานให้ทำการเปิด Jupyter Notebook ขึ้นมา

ต่อมาให้ทำการอิมพอร์ต pandas เข้ามาใช้งาน

import pandas as pd

เมื่อเปิด Jupyter Notebook พร้อมทั้งอิมพอร์ตไลบรารี่ pandas เข้ามาเรียบร้อยเเล้วก็มาลุยกันเลยครับ Hey we go !!

การเชื่อมข้อมูลโดยผ่าน Columns ที่ชื่อเหมือนกัน

ถ้ามีตาราง DataFrame สองอันแล้วต้องการนำข้อมูลมาเชื่อมต่อรวมกันโดยอาศัยคอลัมน์หนึ่งเป็นตัวเชื่อมสามารถใช้ฟังก์ชัน pd.merge ได้

ตัวอย่าง

ทำการสร้างข้อมูล 2 ชุด ผ่าน Notepad หรือตามที่สะดวกได้เลยครับ

ชุดที่ 1

 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 ครั้ง

จากนั้นเรียกใช้งานด้วยคำสั่ง pd.read_csv พร้อมกำหนดตัวแปรดังรูปภาพด้านล่าง

A = pd.read_csv('data1.txt', sep='')

B = pd.read_csv('data2.txt', sep='')

ต่อไปเราจะทำการเชื่อมข้อมูลทั้ง 2 DataFrame เข้าด้วยกัน ด้วยคำสั่ง pd.merge ดังรูปภาพด้านล่าง

pd.merge(A, B)

จะเห็นว่าพอรวมกันแล้วได้ DataFrame ที่มีความเปลี่ยนเเปลงไป ซึ่งในส่วนของ Index เเละ คอลัมน์ studentId จะไม่ถูกเปลี่ยนแปลง สามารถบ่งบอกได้ว่า ในส่วนที่ไม่ถูกเปลี่ยนแปลงนั้นคือจุดที่ใช้ในการเชื่อมต่อ ซึ่งปกติถ้าไม่ได้ระบุอะไรนอกเหนือจาก DataFrame ที่จะใช้เชื่อมคอลัมน์ที่มีข้อมูลซ้ำกันในทั้งสอง DataFrame จะถูกใช้เป็นตัวเชื่อม แต่หากระบุไว้ในคอลัมน์ที่ถูกใช้เชื่อมจะมีเพียงอันเดียว เช่น ผมจะทำการสร้างตารางขึ้นมาใหม่ โดยอ้างอิงจาก DataFrame ชุดที่ 2 โดยจะเพิ่มคอลัมน์ thai2 จาก DataFrame ชุดที่ 1 เพื่อใช้ในการเชื่อมต่อแบบระบุคอลัมน์

ชุดที่ 3


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')

เมื่อชื่อ Columns ที่ต้องการเชื่อมไม่เหมือนกันทั้งสอง DataFrame

ไม่จำเป็นว่าสองคอลัมน์จากสองตารางที่เอามาเชื่อมกันจะมีค่าชื่อ ที่เหมือนกันเสมอไป ในกรณีที่ต่างกันแบบนี้จะต้องกำหนดชื่อคอลัมน์ที่ต้องการเชื่อมโดยใช้คำสั่ง 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)

ศึกษาเพิ่มเติมใน Python Pandas Series

สามารถติดตามหรือศึกษาเพิ่มเติมได้ใน 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