Lookup Table Replace
lookup_replace · standardize · any
2026-09-24
กำลังประมวลผล…
lookup_replace · standardize · any
2026-09-24
map_values เหมาะกับการจับคู่ไม่กี่สิบค่า แต่ถ้าองค์กรมีตารางมาตรฐานอยู่แล้ว เช่น รหัสจังหวัด 77 รายการ หรือรหัสสินค้า 900 รายการ การพิมพ์ทีละคู่ไม่ไหว เทคนิคนี้รับตารางทั้งชุดเป็น CSV สองคอลัมน์ แล้วแทนค่าให้ทีเดียว
TH- ทั้งหมด ใช้ find_replace แบบ regexlookup ซึ่งเป็นข้อความ CSV คอลัมน์แรกคือค่าเดิม คอลัมน์ที่สองคือค่าใหม่ และแถวแรกเป็นหัวตารางcaseSensitive ปิดอยู่เป็นค่าเริ่มต้น และค่าจะถูกตัดช่องว่างหัวท้ายก่อนเทียบunmapped — keep เก็บไว้ หรือ null ทำให้ว่างเพื่อให้เห็นว่ายังไม่ได้จัดการ| Parameter | Type | Default |
|---|---|---|
columns | string[] | — |
lookup | string | "from,to\n" |
caseSensitive | boolean | false |
unmapped | keep | null | "keep" |
import csv
import io
import json
def parse_lookup(text, case_sensitive=False):
reader = csv.reader(io.StringIO(text))
rows = [row for row in reader if len(row) >= 2]
mapping = {}
for source, target in (row[:2] for row in rows[1:]):
key = source.strip()
mapping[key if case_sensitive else key.lower()] = target
return mapping
def lookup_replace(value, mapping, case_sensitive=False, unmapped='keep'):
if value is None:
return None
key = str(value).strip()
found = mapping.get(key if case_sensitive else key.lower())
if found is not None:
return found
return value if unmapped == 'keep' else None
table = 'from,to\nTH,Thailand\nJP,Japan\n'
mapping = parse_lookup(table)
values = ['TH', 'jp', 'ไทย', None]
print(json.dumps([lookup_replace(v, mapping) for v in values], ensure_ascii=False))
ทีมบัญชีมีไฟล์รหัสศูนย์ต้นทุน 420 รายการ เปิดไฟล์นั้นแล้วคัดลอกสองคอลัมน์มาวางในช่อง lookup ตั้ง unmapped เป็น null ในรอบแรกเพื่อให้เห็นว่ามีรหัสไหนในข้อมูลที่ไม่อยู่ในตารางมาตรฐาน ส่งรายการนั้นกลับไปถามทีมบัญชี แล้วค่อยเปลี่ยนเป็น keep เมื่อตารางครบ
ใช้ map_values เมื่อมีคู่ไม่กี่คู่ ใช้ find_similar_values เพื่อหาว่าค่าไหนควรจับคู่ และใช้ validate_regex ตรวจรูปแบบรหัสหลังแทนค่าแล้ว