เพิ่มคอลัมน์ (2)
การใช้ iterrows() เพื่อวนซ้ำทุก observation ใน Pandas DataFrame นั้นเข้าใจง่าย แต่ไม่ค่อยมีประสิทธิภาพนัก เพราะในแต่ละรอบการวนซ้ำ จะมีการสร้าง Pandas Series ใหม่ขึ้นมาเสมอ
หากต้องการเพิ่มคอลัมน์ใน DataFrame โดยการเรียกฟังก์ชันบนคอลัมน์อื่น วิธีที่ดีกว่าคือใช้ apply() แทนการใช้ iterrows() ร่วมกับ for loop
ลองเปรียบเทียบแบบ iterrows() กับแบบ apply() ที่ให้ผลลัพธ์เดียวกันใน DataFrame brics:
for lab, row in brics.iterrows() :
brics.loc[lab, "name_length"] = len(row["country"])
brics["name_length"] = brics["country"].apply(len)
เราสามารถทำสิ่งคล้ายกันเพื่อเรียกเมธอด upper() กับชื่อทุกรายการในคอลัมน์ country ได้ อย่างไรก็ตาม เนื่องจาก upper() เป็น เมธอด จึงต้องใช้วิธีที่แตกต่างออกไปเล็กน้อย:
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python ระดับกลาง
คำแนะนำการฝึกหัด
- แทนที่
forloop ด้วยโค้ดบรรทัดเดียวที่ใช้.apply(str.upper)ผลลัพธ์ที่ได้ควรเหมือนเดิม คือเพิ่มคอลัมน์COUNTRYลงในcarsโดยมีชื่อประเทศเป็นตัวพิมพ์ใหญ่ทั้งหมด - เมื่อเสร็จแล้ว ให้พิมพ์
carsเพื่อตรวจสอบผลลัพธ์
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Import cars data
import pandas as pd
cars = pd.read_csv('cars.csv', index_col = 0)
# Use .apply(str.upper)
for lab, row in cars.iterrows() :
cars.loc[lab, "COUNTRY"] = row["country"].upper()