หลังจากที่ได้เรียนรู้วิธี การสร้าง Series ใน Pandas กันไปแล้ว วันนี้มาเรียนวิธีการสร้าง DataFrame กันครับ
DataFrame ที่จะสร้างกันวันนี้ เป็นทีมฟุตบอลชายหาด All Star 5 คน
วิธีการก็คล้ายๆกับ การสร้าง series ด้วยคำสั่ง Series() ซึ่งการสร้าง DataFrame นั้นใช้คำสั่ง DataFrame() โดยในวงเล็บ จะประกอบไปด้วยสามส่วน
- ส่วนแรกคือข้อมูลของผู้เล่นแต่ละคน
- ส่วนที่สอง คือ แถว index คือ ชื่อลำดับอ้างอิง ของผู้เล่นแต่ละคน
- ส่วนที่สาม คือ ส่วน columns คือ ชื่อหัวข้อ ของข้อมูลผู้เล่นแต่ละคน
import pandas as pdmy_team = pd.DataFrame
จาก Code ด้านบน จริงๆแล้วมีแค่ 2 บรรทัดเท่านั้นนะครับ
บรรทัดแรกคือการ import pandas เข้ามา
ส่วนอีกบรรทัดคือการสร้าง DataFrame ซึ่งจริงๆแล้ว Code ในส่วนนี้เราสามารถพิมพ์ในบรรทัดเดียวกันได้ แต่เราสามารถกด Enter แยกบรรทัดออกมาเพื่อให้อ่านได้ง่ายขึ้น
เมื่อเราสร้างเสร็จแล้ว ลองเรียกข้อมูลมาดูกัน
my_team
Name | Team | Position | Country | Number | |
---|---|---|---|---|---|
Player 1 | Messi | Barcelona | Forward | Arg | 10 |
Player 2 | Ronaldo | Real Madrid | Forward | Por | 7 |
Player 3 | Pogba | Manchester United | Midfield | Fra | 6 |
Player 4 | Suarez | Barcelona | Forward | Urg | 9 |
Player 5 | David de Gea | Manchester United | Goal Keeper | Spa | 1 |
DataFrame คล้ายกับกล่องข้อมูลที่บรรจุไปด้วยข้อมูลหลากหลาย เราสามารถใช้คำสั่งเลือกข้อมูลที่เราต้องการได้หลายรูปแบบ โดยใช้ method ที่เรียกว่า .loc และ .iloc
เริ่มจาก .loc ซึ่งหมายถึงการดึงข้อมูลจากชื่อของแถว สมมุติว่าเราอยากเอาข้อมูลทั้งหมดของ Player 2 เพียงแค่คนเดียว มาเก็บไว้ในตัวแปรใหม่ที่ชื่อว่า CR7 ก็สามารถทำได้โดยเขียน Code ดังนี้
ทีนี้ลองมาดูผลลัพท์กัน
Team Real Madrid
Position Forward
Country Por
Number 7
Name: Player 2, dtype: object
ส่วน .iloc จะต่างกับ .loc ตรงที่ว่าจะใช้ลำดับเป็นตัวเลข แทนการใช้ชื่อ(ตัวอักษร) อย่าลืมว่า ลำดับเริ่มต้นที่ 0 ไม่ใช่ 1 นะครับ ดังนั้นในกรณี Player 2 หากใช้ method .iloc สามารถเขียน code ได้ดังนี้
มาดูผลกันว่าต่างกับการใช้ .loc หรือไม่
Team Real Madrid
Position Forward
Country Por
Number 7
Name: Player 2, dtype: object
ไม่ว่าจะใช้ .loc หรือ .iloc ผลลัพท์ก็ไม่ได้ต่างกันเลย การเลือกใช้นั้นขึ้นอยู่กับว่า index ของตัว DataFrame เหมาะที่จะเรียกตามหมายเลขลำดับ หรือ ชื่อมากกว่ากัน
จากบทความก่อนหน้านี้ จำได้ไหมครับว่า
เจ้าหนึ่งแถวที่ได้ออกมา | ไม่ว่าจะแนวนอน (Row) หรือ แนวตั้ง (Column) | ใน Pandas เรียกว่า Series
เราลองมาดูกันว่า CR7 ของเราที่ได้ออกมานั้น เป็น ข้อมูลประเภทใดโดยใช้ฟังก์ชัน type()
type(CR7)<class ‘pandas.core.series.Series’>
เห็นไหมครับว่าแถวเดียวที่ได้ออกมา(ในกรณีนี้คือ Player 2) เป็น Series ไม่ได้เป็น DataFrame
หนึ่งในความสนุกของการเล่นกับ DataFrame ใน Pandas นั้น เราสามารถเลือกเอาเฉพาะข้อมูลที่เราต้องการ ไปใช้ทำงานต่อไป และ สร้าง DataFrame ขึ้นมาใหม่ โดยใช้ .iloc และ .loc ที่เราได้เรียนกันไปแล้ว วิธีการเหล่านี้เราเรียกว่า Data Slicing
มาลองดูตัวอย่างกัน
เราจะสร้าง DataFrame ใหม่ (twoPlayers) จาก DataFrame เดิม (my_team) ด้วยการดึงเอาเฉพาะข้อมูลดังต่อไปนี้
- นักเตะสองคนได้แก่ Player 3 และ Player 5
- ข้อมูลใน 3 column ได้แก่ Name Position และ Country
- ใน DataFrame ใหม่นี้ จะย้าย column Country มาเป็น column แรก
มาเขียน Code กันครับ
สร้าง DataFrame ใหม่เสร้จแล้ว ทีนี้มาลองดูผลลัพท์ และ เช็ค type() กัน
print(twoPlayers)
Country | Name | Position | |
---|---|---|---|
Player 3 | Fra | Pogba | Midfield |
Player 5 | Spa | David de Gea | Goal Keeper |
print(type(twoPlayers))
<class ‘pandas.core.frame.DataFrame>
จาก code ข้างบนจะพบว่า DataFrame ที่เราสร้างนั้น สามารถจัดเรียงลำดับของข้อมูลตาม index ที่เรากำหนดไว้ใน [] ของ method .iloc
ถ้าใครอยากฝึกฝนเพิ่มเติม แนะนำให้ลองสลับ index เล่นๆดู หรือ จะลองสร้าง DataFrame ใหม่ด้วย method.loc หรือจะ สร้างทีมบอลในฝันของคุณเองใหม่หมดเลยก็ได้นะครับ
เมื่อเราทราบวิธีการสร้าง และ Slice Series และ DataFrame กันแล้ว ต่อไป เรียนรู้วิธีการ แก้ไขข้อมูล และ สร้างข้อมูลแบบรัวๆด้วยการ Broadcasting ใน pandas กัน… เหมือนเดิมครับ เขียนเสร็จแล้วจะมาใส่ link ให้นะครับ
กด Like กด Share กันได้นะครับ และ ยังสามารถกดติดตาม Facebook ของเราได้ที่นี่ หรือ Follow ใน Twitter เพื่อ ให้ทีมงาน AI Informatics มีกำลังใจผลิตเนื้อหาต่อไปครับ ขอบคุณครับ