Convert Unit
convert_unit · numbers · number, text
2026-09-24
กำลังประมวลผล…
convert_unit · numbers · number, text
2026-09-24
ข้อมูลจากหลายแหล่งมักใช้หน่วยไม่ตรงกัน ไฟล์จากซัพพลายเออร์ต่างประเทศเป็นปอนด์ ส่วนระบบคลังเป็นกิโลกรัม ถ้าเอามารวมกันโดยไม่แปลง ยอดรวมจะผิดแบบที่มองไม่เห็น เทคนิคนี้แปลงหน่วยให้ตรงกันก่อนนำไปคำนวณ
"5 kg" กับ "11 lb" — ต้องแยกหน่วยออกด้วย extract_pattern ก่อน แล้วค่อยแปลงทีละกลุ่มknown แปลงระหว่างหน่วยที่ระบบรู้จัก ได้แก่ มวล (kg, g, lb, oz) ความยาว (m, cm, km, inch, ft, mi) และปริมาตร (l, ml, gal)factor คูณด้วยตัวเลขที่คุณกำหนดเอง สำหรับหน่วยเฉพาะทางที่ไม่มีในรายการdecimals และค่าที่ไม่ใช่ตัวเลขจะถูกส่งผ่านโดยไม่แตะ| จาก | เป็น | 1 หน่วยได้ | |---|---|---| | kg | lb | 2.2046 | | cm | inch | 0.3937 | | l | gal | 0.2642 |
| Parameter | Type | Default |
|---|---|---|
column | string | — |
mode | known | factor | "known" |
from | kg | g | lb | oz | m | cm | km | inch | ft | mi | l | ml | gal | "kg" |
to | kg | g | lb | oz | m | cm | km | inch | ft | mi | l | ml | gal | "lb" |
factor | number | 1 |
decimals | number | 4 |
import json
UNITS = {
'kg': ('mass', 1.0), 'g': ('mass', 0.001), 'lb': ('mass', 0.45359237), 'oz': ('mass', 0.028349523125),
'm': ('length', 1.0), 'cm': ('length', 0.01), 'km': ('length', 1000.0),
'inch': ('length', 0.0254), 'ft': ('length', 0.3048), 'mi': ('length', 1609.344),
'l': ('volume', 1.0), 'ml': ('volume', 0.001), 'gal': ('volume', 3.785411784),
}
def convert_unit(value, source, target, decimals=4):
if UNITS[source][0] != UNITS[target][0]:
raise ValueError(f'แปลง {source} เป็น {target} ไม่ได้เพราะเป็นคนละชนิดหน่วย')
try:
number = float(value)
except (TypeError, ValueError):
return value
return round(number * UNITS[source][1] / UNITS[target][1], decimals)
values = [1, '2.5', 'ไม่ระบุ', None]
print(json.dumps([convert_unit(v, 'kg', 'lb') for v in values], ensure_ascii=False))
ไฟล์สินค้านำเข้ามีคอลัมน์ weight_lb ขณะที่ระบบคลังใช้กิโลกรัม เลือก from เป็น lb และ to เป็น kg ตั้ง decimals เป็น 3 แล้วใช้ rename_column เปลี่ยนชื่อเป็น weight_kg ทันทีในขั้นตอนถัดไป — ชื่อคอลัมน์ที่ยังบอกหน่วยเก่าคือสาเหตุอันดับหนึ่งที่ทำให้คนเอาไปคำนวณผิดซ้ำ
ใช้ convert_type ก่อนถ้าคอลัมน์ยังเป็นข้อความ ใช้ round_number เพื่อคุมทศนิยม และใช้ scale_values เมื่อเป้าหมายคือเทียบสเกลกัน ไม่ใช่เปลี่ยนหน่วยจริง