Lab: Clean Messy Data
Lab: Clean Messy Data
Section titled “Lab: Clean Messy Data”ในแล็บนี้คุณจะได้ข้อมูลที่ “เละ” สุดๆ และต้อง clean ให้พร้อมวิเคราะห์ นี่คือสถานการณ์ที่พบได้จริงในทุกวัน
-
สร้างข้อมูลเละๆ
import pandas as pdmessy = pd.DataFrame({"name": [" Alice ", " BOB", "charlie ", None, " Diana "],"city": ["กทม.", "กทม", "กรุงเทพ", "เชียงใหม่ ", "กรุงเทพฯ"],"zipcode": ["10100", "1020", "10300", "50000", "104"],"salary": ["50000", "N/A", "45000", "62000", "ไม่ระบุ"],"active": ["yes", "YES", "no", "Yes", None]}) -
Clean ชื่อ — strip whitespace, title case, fill missing
-
Normalize เมือง — รวม “กทม.”, “กทม”, “กรุงเทพ”, “กรุงเทพฯ” เป็นค่าเดียว
-
ซ่อม zipcode — เติม 0 ให้ครบ 5 หลัก
-
แปลง salary — เป็น numeric, ค่าที่แปลงไม่ได้ → NaN
-
Normalize active — แปลง yes/YES/Yes → True, no → False, None → False
-
ตรวจสอบผลลัพธ์ — ใช้
.info()และ.isna().sum()ยืนยันว่า clean แล้ว
Show Solution
import pandas as pd
# Step 2: Clean ชื่อmessy["name"] = messy["name"].str.strip().str.title()messy["name"] = messy["name"].fillna("Unknown")
# Step 3: Normalize เมืองmessy["city"] = messy["city"].str.strip()messy["city"] = messy["city"].str.replace( r"กทม\.?|กรุงเทพฯ?", "กรุงเทพมหานคร", regex=True)
# Step 4: ซ่อม zipcodemessy["zipcode"] = messy["zipcode"].str.zfill(5)
# Step 5: แปลง salarymessy["salary"] = pd.to_numeric(messy["salary"], errors="coerce")
# Step 6: Normalize activemessy["active"] = ( messy["active"] .str.lower() .map({"yes": True, "no": False}) .fillna(False))
# Step 7: ตรวจสอบprint(messy)print(messy.dtypes)print(messy.isna().sum())messy.info()