Clean Header Names
clean_headers · columns · any
2026-09-23
กำลังประมวลผล…
clean_headers · columns · any
2026-09-23
หัวตารางจากไฟล์จริงมักมีช่องว่าง วงเล็บ และอักขระพิเศษ ซึ่งทำให้เขียนโค้ดหรือ import เข้าฐานข้อมูลลำบาก เทคนิคนี้จัดชื่อทั้งไฟล์ให้เป็นรูปแบบเดียวในขั้นตอนเดียว และตั้งชื่อใหม่ให้อัตโนมัติเมื่อชื่อที่จัดแล้วชนกัน
rename_column ทีละคอลัมน์จะตรงกว่าstyle ที่เลือกdeduplicate เปิดอยู่ ชื่อที่ซ้ำกับชื่อก่อนหน้าจะได้เลขต่อท้าย เช่น full_name_2| ชื่อเดิม | snake_case |
|---|---|
| Full Name | full_name |
| อายุ (ปี) | อายุ_ปี |
| Full-Name | full_name_2 |
| Parameter | Type | Default |
|---|---|---|
style | snake_case | camelCase | Title Case | "snake_case" |
deduplicate | boolean | true |
import json
import re
def style_header(name, style='snake_case'):
words = [w for w in re.split(r'[^\w-]+', name.strip(), flags=re.UNICODE) if w]
if not words:
return name.strip()
if style == 'snake_case':
return '_'.join(w.lower() for w in words)
if style == 'camelCase':
return words[0].lower() + ''.join(w[:1].upper() + w[1:].lower() for w in words[1:])
return ' '.join(w[:1].upper() + w[1:].lower() for w in words)
def clean_headers(names, style='snake_case', deduplicate=True):
used = {}
result = []
for name in names:
next_name = style_header(name, style)
if deduplicate:
count = used.get(next_name, 0)
used[next_name] = count + 1
if count > 0:
next_name = f'{next_name}_{count + 1}'
result.append(next_name)
return result
names = ['Full Name ', 'อายุ (ปี)', 'Full-Name', 'value']
print(json.dumps(clean_headers(names), ensure_ascii=False))
ไฟล์ยอดขายรายเดือนมีหัวตาราง ยอดขาย (บาท), Sales Rep, sales rep รัน clean_headers แบบ snake_case จะได้ ยอดขาย_บาท, sales_rep และ sales_rep_2 ชื่อที่ลงท้ายด้วยเลขคือสัญญาณว่ามีคอลัมน์ซ้ำในไฟล์ต้นทาง ควรกลับไปดูว่าควรลบหรือรวมคอลัมน์นั้น
ใช้ rename_column เมื่ออยากตั้งชื่อเฉพาะคอลัมน์ให้ต่างจากกฎทั่วไป ใช้ remove_column กับคอลัมน์ซ้ำที่ไม่ต้องการ และใช้ reorder_columns เพื่อจัดลำดับหลังชื่อเรียบร้อยแล้ว