Normalize Boolean
parse_boolean · types · any
2026-09-23
กำลังประมวลผล…
parse_boolean · types · any
2026-09-23
คอลัมน์ที่ควรเป็นใช่หรือไม่ใช่มักเก็บมาหลายแบบในไฟล์เดียว ทั้ง yes, Y, 1, ใช่ และ TRUE การกรองหรือนับจึงพลาดง่าย เทคนิคนี้แปลงทุกแบบให้เป็น Boolean เดียวกัน และบังคับให้คุณเลือกว่าจะทำอย่างไรกับค่าที่ไม่อยู่ในรายการ
is_active, paid หรือ สมัครรับข่าวสารyes, no, pending — ใช้ map_values เพื่อรักษาความหมายให้ครบ1 กับ 0 ไม่ได้แปลว่าใช่หรือไม่ใช่ เช่น รหัสสถานะtrueTokens และ falseTokensonUnknown — keep เก็บค่าเดิมไว้ ส่วน null เปลี่ยนเป็นค่าว่างnull ไว้ ไม่เช่นนั้นจะคงชนิดเดิมเพื่อไม่ให้ชนิดกับค่าขัดกัน| Parameter | Type | Default |
|---|---|---|
columns | string[] | — |
trueTokens | string[] | ["true","yes","y","1","ใช่","จริง","t"] |
falseTokens | string[] | ["false","no","n","0","ไม่ใช่","เท็จ","f"] |
onUnknown | keep | null | "keep" |
import json
TRUE_TOKENS = ['true', 'yes', 'y', '1', 'ใช่', 'จริง', 't']
FALSE_TOKENS = ['false', 'no', 'n', '0', 'ไม่ใช่', 'เท็จ', 'f']
def parse_boolean(value, true_tokens=None, false_tokens=None, on_unknown='keep'):
truthy = {t.strip().lower() for t in (true_tokens or TRUE_TOKENS)}
falsy = {t.strip().lower() for t in (false_tokens or FALSE_TOKENS)}
if truthy & falsy:
raise ValueError('true and false tokens must not overlap')
if value is None or isinstance(value, bool):
return value
text = str(value).strip().lower()
if text in truthy:
return True
if text in falsy:
return False
return value if on_unknown == 'keep' else None
values = [' ใช่ ', 'NO', 1, False, None, '', 'maybe']
print(json.dumps([parse_boolean(v, on_unknown='null') for v in values], ensure_ascii=False))
คอลัมน์ subscribed มี Y, yes, ใช่, 1 และ - ปนกัน ตั้ง onUnknown เป็น null ในรอบแรกเพื่อให้เห็นว่ามีกี่ค่าที่ไม่เข้าพวก แล้วดูว่าค่าเหล่านั้นคืออะไร ถ้าเป็น - ให้รัน detect_null_like ก่อน จากนั้นรัน parse_boolean อีกครั้งจะได้คอลัมน์ boolean ที่สะอาด
ใช้ detect_type เพื่อดูว่าระบบมองคอลัมน์นี้เป็นอะไร ใช้ convert_type เมื่อต้องการแปลงหลายคอลัมน์พร้อมกัน และใช้ map_values เมื่อสถานะมีมากกว่าสองแบบ