Map / Standardize Values
map_values · standardize · any
2026-09-23
กำลังประมวลผล…
map_values · standardize · any
2026-09-23
คอลัมน์ประเทศที่มี TH, ไทย, Thailand และ thai หมายถึงสิ่งเดียวกัน แต่ไม่มีกฎอัตโนมัติใดรู้ได้เองว่าคุณอยากให้เหลือค่าไหน เทคนิคนี้ให้คุณเขียนตารางจับคู่เอง ผลลัพธ์จึงชัดเจน ตรวจสอบได้ และนำไปใช้ซ้ำกับไฟล์รอบหน้าได้ผลเหมือนเดิมทุกครั้ง
find_similar_values หรือกฎแบบ regex แทนchange_case กับ trim_whitespace จะสั้นกว่าmappingcaseSensitive ปิดอยู่เป็นค่าเริ่มต้น การเทียบจึงไม่สนใจตัวพิมพ์ใหญ่เล็กunmapped — keep เก็บค่าเดิมไว้ ส่วน null เปลี่ยนเป็นค่าว่างเพื่อให้เห็นชัดว่ายังไม่ได้จัดกลุ่มnull เดิมยังเป็น null เสมอ ไม่ถูกจับคู่กับกุญแจใด| Parameter | Type | Default |
|---|---|---|
columns | string[] | — |
mapping | record | {} |
caseSensitive | boolean | false |
unmapped | keep | null | "keep" |
import json
def map_values(value, mapping, case_sensitive=False, unmapped='keep'):
if value is None:
return None
text = str(value)
key = text if case_sensitive else text.lower()
for source, target in mapping.items():
candidate = source if case_sensitive else source.lower()
if candidate == key:
return target
return value if unmapped == 'keep' else None
mapping = {'TH': 'Thailand', 'ไทย': 'Thailand'}
values = ['th', 'ไทย', 'Japan', None]
result = [map_values(value, mapping) for value in values]
print(json.dumps(result, ensure_ascii=False))
คอลัมน์ status มี paid, PAID, จ่ายแล้ว และ done เปิด Cluster Review เพื่อดูว่ามีค่าอะไรบ้าง แล้วกลับมาที่ map_values เพื่อบันทึกการจับคู่ทั้งสี่ค่าเป็น paid ตั้ง unmapped เป็น null ชั่วคราวเพื่อให้เห็นว่ามีค่าไหนหลุดรายการบ้าง จากนั้นเปลี่ยนกลับเป็น keep เมื่อจับคู่ครบแล้ว
ใช้ find_similar_values เพื่อหาว่ามีค่าอะไรที่ควรจับคู่บ้าง ใช้ change_case ก่อนเพื่อลดจำนวนกุญแจที่ต้องเขียน และใช้ detect_null_like เพื่อไม่ให้ "-" กลายเป็นกลุ่มของตัวเอง