DataLover ข้อมูลติดต่อ แผนที่และเส้นทาง แบบฟอร์มติดต่อ เวลาทำการ บริการ คะแนนรีวิว รูปภาพ วิดีโอ และข่าวสารจาก DataLover, เว็บไซต์คอมพิวเตอร์และอินเทอร์เน็ต, 90/919 ต. ท่าอิฐ อ. ปากเกร็ด, Nonthaburi

สอนและสร้างระบบ Data & AI Automation สำหรับคนทำงานและ SME
เปลี่ยน Excel และงานรายงานที่ทำซ้ำ ให้เป็นระบบตรวจข้อมูล วิเคราะห์ และรายงานอัตโนมัติ
ดาวน์โหลดเครื่องมือฟรีและดูคอร์สเริ่มต้นด้านล่าง

12 ไฟล์ 3,660 แถว ใช้เวลา 0.43 วินาที บนเครื่องที่ผมทดสอบนี่คือผลจากการรวมไฟล์ยอดขายสมมติของ 12 สาขา ด้วย 7 คำสั่ง Pytho...
03/11/2026

12 ไฟล์ 3,660 แถว ใช้เวลา 0.43 วินาที บนเครื่องที่ผมทดสอบ

นี่คือผลจากการรวมไฟล์ยอดขายสมมติของ 12 สาขา ด้วย 7 คำสั่ง Python (pandas) รันจริงบนเครื่อง ไม่ใช่ Colab ข้อมูลทั้งหมดเป็นข้อมูลสมมติ ตัวเลขเวลาเป็นของเครื่องที่ทดสอบเท่านั้น เครื่องของคุณอาจเร็วหรือช้ากว่านี้

สิ้นเดือนแบบเดิมคือ เปิดไฟล์ 12 สาขาทีละไฟล์ ก๊อปมาวางต่อกัน ลบแถวซ้ำ TRIM ชื่อ VLOOKUP หมวด ทำ Pivot แล้วแยกไฟล์ส่งกลับแต่ละสาขา และทำซ้ำแบบนี้ทุกเดือน จุดที่พลาดง่ายที่สุดไม่ใช่ความสะเพร่าของคนทำ แต่เป็นช่องว่างที่มองไม่เห็น เช่น "สาขา 04" กับ "สาขา 04 " (มีช่องว่างท้าย) ที่ Pivot นับเป็นคนละสาขา ในข้อมูลทดสอบ ชื่อสาขาแตกเป็น 15 แบบ ทั้งที่มีแค่ 12 สาขา

เริ่มไฟล์ด้วยบรรทัดนี้
import pandas as pd, glob

1. เปิดทีละไฟล์ ก๊อปมาวางต่อกัน
df = pd.concat([pd.read_excel(f) for f in glob.glob("สาขา/*.xlsx")])
ดูดทุกไฟล์ในโฟลเดอร์มารวมเป็นตารางเดียว (ทดสอบ: อ่านเข้ามา 3,660 แถว)

2. Remove Duplicates
df = df.drop_duplicates()
ลบแถวที่ซ้ำกันทุกช่อง (ทดสอบ: ลบ 60 แถว เหลือ 3,600)

3. TRIM ทีละคอลัมน์
df["สาขา"] = df["สาขา"].str.strip()
ตัดช่องว่างหัวท้าย ชื่อสาขาเลยไม่แตกเป็นหลายแถว (ทดสอบ: 15 แบบ เหลือ 12 แบบ) ข้อนี้ต้องทำก่อนข้อ 5 เสมอ ไม่งั้น Pivot จะแตกแถว

4. VLOOKUP หมวดสินค้า
df = df.merge(ref, on="สินค้า", how="left", validate="many_to_one")
ดึงหมวดจากตารางอ้างอิง ref ถ้าในตารางอ้างอิงมีชื่อสินค้าซ้ำ คำสั่งจะหยุดและฟ้อง MergeError ทันที (ทดสอบแล้วโดยใส่ชื่อซ้ำลงไป 1 แถว)

5. PivotTable
pv = df.pivot_table(index="สาขา", columns="หมวด", values="ยอด", aggfunc="sum", margins=True, margins_name="รวม")
สรุปยอดสาขา × หมวด พร้อมแถวรวม (คอลัมน์ ยอด ในไฟล์ตัวอย่างคำนวณจากจำนวนคูณบาทต่อชิ้นไว้ก่อนข้อนี้)

6. Filter แล้ว Save As ทีละสาขา
for s, g in df.groupby("สาขา"): g.to_excel(f"{s}.xlsx")
แยกไฟล์ส่งคืนแต่ละสาขาอัตโนมัติ (ทดสอบ: ได้ 12 ไฟล์)

7. นั่งกดเครื่องคิดเลขเทียบยอด
assert pv.loc["รวม","รวม"] == df["ยอด"].sum()
ถ้ายอดไม่ตรง สคริปต์หยุดและฟ้องทันที (ทดสอบ: ยอดรวม 473,145 บาท ตรงกับช่องรวมใน Pivot)

ทั้ง 7 บรรทัดข้างบนรันผ่านจริงตามที่พิมพ์ไว้ ในการทดสอบรอบเดียวกัน

เช็ก 3 ข้อก่อนส่งหัวหน้า
1. แถวเข้า ลบ แถวซ้ำ ต้องเท่ากับแถวออก (3,660 − 60 = 3,600)
2. จำนวนสาขาใน Pivot ต้องเท่ากับจำนวนสาขาจริง (12)
3. ช่องรวมใน Pivot ต้องเท่ากับผลรวมยอดทั้งหมด (473,145)

ผมเริ่มสาย IT ตั้งแต่ปี 2548 และในลิสต์นี้ ข้อ 7 สำคัญที่สุด เพราะงานข้อมูลคือการทำให้คนเชื่อตัวเลขได้ ไม่ใช่แค่ย้ายข้อมูลจากที่หนึ่งไปอีกที่หนึ่ง

แต่ 7 คำสั่งนี้เป็นแค่ส่วนเดียว ถ้าอยากได้ครบทั้งระบบ ตั้งแต่ลง Python ไปจนถึงทำความสะอาดข้อมูลแบบ RAW → CLEAN → CURATED มีอยู่ใน DataLover 4 Kings
1. AutoWork 2.0
2. Excel Killer (Data Cleansing)
3. Python Data Visualization
4. AI Data Automation
เป็นไฟล์ PDF 4 เล่ม รวม 200+ หน้า พร้อม Mini App + Scripts และมีบทลง Python ส่งไฟล์ทางอีเมลทันทีหลังชำระ อัปเดตฟรีตลอด ใช้ได้กับ Excel ทุกเวอร์ชันและ Google Sheets เครื่องมือที่ใช้ฟรีทั้งหมด ยกเว้น OpenAI ที่มีค่าใช้จ่าย ขอเงินคืนได้ทันทีเมื่อแจ้ง
ครบ 4 เล่ม 1,490 บาท

สิ้นเดือนนี้คุณต้องรวมกี่ไฟล์? คอมเมนต์ตัวเลขมาเลย

ถ้าสนใจ พิมพ์ "สนใจ" ใต้โพสต์นี้
ติดตาม EP.2

THEELA | Data Engineering • Big Data • Cloud • Data Strategy
ผู้สร้าง DataLover — ถ่ายทอดประสบการณ์ Data จากงานจริงสู่การใช้งานจริง

#งานสิ้นเดือนจบใน7คำสั่ง #รวมไฟล์Excel #งานสิ้นเดือน #พนักงานออฟฟิศ

สมาชิกว่าไงบ้างครับ
03/11/2026

สมาชิกว่าไงบ้างครับ

92 จาก 161 ประกาศงาน Data Analyst ในไทยขอ SQLตัวเลขนี้มาจากประกาศงานสาธารณะ 161 ประกาศที่ Get U Hired รวบรวม ช่วง 3 ส.ค....
03/11/2026

92 จาก 161 ประกาศงาน Data Analyst ในไทยขอ SQL

ตัวเลขนี้มาจากประกาศงานสาธารณะ 161 ประกาศที่ Get U Hired รวบรวม ช่วง 3 ส.ค. – 29 ต.ค. 2026 (เปิดตรวจหน้าเว็บวันที่ 3 พ.ย. 2026) SQL ถูกขอมากที่สุด ตามด้วย Power BI 64 ประกาศ และ Python 53 ประกาศ ตัวเลขชุดนี้เป็นค่าประมาณจากการเก็บข้อมูลอัตโนมัติของเว็บ และหน้าเว็บอัปเดตเรื่อยๆ
ที่มา: https://getuhired.co/insights/roles/data-analyst/markets/th/

ปัญหาของคนทำงานออฟฟิศที่ใช้ Excel ทุกวันคือ อยากเริ่มฝึก แต่เครื่องบริษัทลงโปรแกรมเองไม่ได้ และยังไม่อยากจ่ายค่าคอร์สก่อนจะรู้ว่าตัวเองชอบสายนี้หรือเปล่า

นี่คือ 10 เว็บฝึกฟรีที่ใช้ผ่านเบราว์เซอร์ ไม่ต้องลงโปรแกรม ทุกเว็บเปิดลองใช้จริงเมื่อ 3 พ.ย. 2026 และเว็บที่ไม่ต้องล็อกอินได้ลองพิมพ์คำสั่งจริงอย่างน้อย 1 บรรทัด

สาย SQL ไม่ต้องสมัครบัญชี
1. SQLBolt https://sqlbolt.com
บทเรียน SQL ทีละบท พิมพ์คำสั่งในหน้าเว็บได้เลย ลองพิมพ์ SELECT title FROM movies; แล้วผ่านแบบฝึกข้อ 1

2. SQLZoo https://sqlzoo.net
โจทย์ SQL ไล่ระดับ ระบบตรวจคำตอบให้ ลองทำข้อหาประชากรเยอรมนี ขึ้นว่า Correct answer

3. W3Schools SQL Tryit https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
แก้คำสั่งตัวอย่างแล้วกด Run SQL เห็นผลทันที ลองนับลูกค้าตามประเทศด้วย GROUP BY ได้ 21 แถว

4. DuckDB Shell https://shell.duckdb.org
พิมพ์ SQL ในเบราว์เซอร์ ลองรวมยอดตามแผนกจากตัวเลขสมมติ ได้ HR 200 และ IT 300

5. SQLite Online https://sqliteonline.com
สร้างตารางเอง หรืออัปไฟล์ CSV แล้วพิมพ์ SQL ได้ ทดสอบอัป CSV ตัวอย่าง 3 แถว (ตัวเลขสมมติ) แล้วกรองยอดที่มากกว่า 100 ได้ 2 แถว โดยไม่ต้องสมัคร เว็บนี้เขียนไว้เองด้วยว่าไม่ได้มีไว้ประมวลผลข้อมูลส่วนบุคคล

สาย Python และข้อมูลจริง
6. Kaggle Learn https://www.kaggle.com/learn
คอร์สสั้น Python, Pandas, Intro to SQL หน้าเว็บเขียนว่าไม่มีค่าใช้จ่ายและรับใบรับรองได้ ต้องสมัครบัญชี Kaggle เพื่อรับใบรับรอง

7. freeCodeCamp Data Analysis with Python https://www.freecodecamp.org/learn/data-analysis-with-python
NumPy, Pandas และการทำกราฟ ใบรับรองต้องส่ง 5 โปรเจกต์ ต้อง Sign in เพื่อบันทึกความคืบหน้า หน้าเว็บแจ้งว่าเนื้อหาส่วนนี้ไม่อัปเดตแล้วแต่ยังเรียนได้

8. Google Colab https://colab.research.google.com
เขียน Python + Pandas ในเบราว์เซอร์ ต้องมีบัญชี Google (ไม่ได้ล็อกอินตอนทดสอบ เลยเห็นแค่หน้าแรก)

9. Python Tutor https://pythontutor.com
ดูโค้ด Python ทำงานทีละบรรทัด ลองรวม 120 + 95 + 140 ได้ 355 ใน 9 ขั้น ไม่ต้องสมัคร

10. data.go.th https://data.go.th
ข้อมูลเปิดของหน่วยงานรัฐไว้ฝึกกับข้อมูลจริง ลองค้นคำว่า คุณภาพอากาศ เจอ 151 ชุดข้อมูล ชุดแรกเป็นข้อมูลฝุ่น PM10 รายวันจากกรมควบคุมมลพิษ มีไฟล์ CSV ให้โหลด

แผนฝึก 7 วันที่ผมแนะนำ
วัน 1–2 SQLBolt ฝึก SELECT / WHERE
วัน 3 W3Schools Tryit ฝึก GROUP BY
วัน 4 SQLZoo โจทย์ JOIN
วัน 5 Kaggle Learn Intro to SQL
วัน 6 Colab + Pandas อ่านไฟล์
วัน 7 เลือกชุดข้อมูลจาก data.go.th แล้วตั้ง 3 คำถาม ตอบเองโดยไม่เปิดเฉลย

เช็กว่าได้ผลจริง 3 ข้อ
1. เขียน SELECT + WHERE + GROUP BY เองได้ โดยไม่ลอก
2. อธิบายผลลัพธ์เป็นภาษาคนได้ใน 1 ประโยค
3. ตัวเลขที่ได้ตรงกับที่นับมือ หรือที่ทำใน Excel

ผมเริ่มสาย IT ตั้งแต่ปี 2548 สิ่งที่เห็นจากงานจริงคือ SQL ที่ถูกเป็นแค่จุดเริ่ม ต่อไปต้องเร็ว ถูก และตรวจย้อนได้

ข้อควรระวัง: ฝึกด้วยข้อมูลตัวอย่างหรือข้อมูลเปิดเท่านั้น อย่าอัปข้อมูลลูกค้า/ข้อมูลบริษัทขึ้นเว็บฝึก (เรื่องนี้เกี่ยวกับ PDPA โดยตรง)

นี่แค่จุดเริ่ม ถ้าอยากเอาไปใช้กับไฟล์งานจริง ตั้งแต่ลง Python ไปจนถึงทำความสะอาดข้อมูลแบบ RAW → CLEAN → CURATED พร้อม Mini App + Scripts ไว้รันต่อ มีครบใน DataLover 4 Kings

ตอนนี้คุณติดตรงไหนมากสุด SQL, Python หรือไม่รู้จะเอาข้อมูลอะไรมาฝึก? คอมเมนต์บอกผมได้

ถ้าสนใจ พิมพ์ "สนใจ" ใต้โพสต์นี้
ติดตาม EP.7

THEELA | Data Engineering • Big Data • Cloud • Data Strategy
ผู้สร้าง DataLover — ถ่ายทอดประสบการณ์ Data จากงานจริงสู่การใช้งานจริง

#ย้ายสายมาData #เรียนSQL ี #เรียนPythonฟรี #ย้ายสายงาน #พนักงานออฟฟิศ

VAT ไม่ตรง Excel 103 บรรทัด ทั้งที่ใช้ .round(2) ปัดแล้ว? แก้ด้วย Decimal ปัดแบบ Excelผมลองสร้างไฟล์ใบแจ้งหนี้สมมติ 2,00...
03/11/2026

VAT ไม่ตรง Excel 103 บรรทัด ทั้งที่ใช้ .round(2) ปัดแล้ว? แก้ด้วย Decimal ปัดแบบ Excel

ผมลองสร้างไฟล์ใบแจ้งหนี้สมมติ 2,000 บรรทัด เป็นค่าเครื่องเขียนกับของใช้ในออฟฟิศเดือนตุลาคม ในไฟล์มีคอลัมน์ VAT ที่คิดด้วยสูตร =ROUND(มูลค่า*0.07, 2) แล้วให้ pandas คิดซ้ำด้วย (มูลค่า * 0.07).round(2) ผลคือไม่ตรงกัน 103 บรรทัด ยอด VAT รวมฝั่ง pandas ได้ 548,737.75 แต่ฝั่ง Excel ได้ 548,738.78 ต่างกัน 1.03 บาท และไม่มี error ขึ้นมาเตือนสักบรรทัด

ตัวอย่างบรรทัดแรกที่ไม่ตรงคือ INV-2610-0006 มูลค่า 627.50 บาท คูณ 7% ได้ 43.925 พอดี Excel ปัดเป็น 43.93 แต่ pandas ได้ 43.92

ต้นเหตุมี 2 อย่างซ้อนกัน อย่างแรก round() ของ Python และ .round() ของ pandas ใช้วิธีปัดที่เรียกว่า "ปัดครึ่งไปหาเลขคู่" (banker's rounding) คือถ้าเศษเป็นครึ่งพอดี จะปัดไปทางที่ลงท้ายเป็นเลขคู่ round(2.5) เลยได้ 2 ส่วน Excel ปัดครึ่งออกจากศูนย์ ได้ 3 อย่างที่สอง ตัวเลขทศนิยมแบบ float เก็บค่าได้ไม่ตรงเป๊ะ เช่น 2.675 ที่เก็บจริงคือ 2.67499999… จึงถูกปัดลงเป็น 2.67

ในไฟล์นี้ บรรทัดที่ไม่ตรงทุกบรรทัดมีมูลค่าลงท้ายด้วย .50 เพราะ .50 × 7% ได้ทศนิยมตำแหน่งที่ 3 เป็น 5 พอดี

ผมรันเทียบไว้ 6 จุดที่ปัดไม่ตรงกับสูตร ROUND
1) round(2.5) ได้ 2 แต่ ROUND ได้ 3
2) round(0.125, 2) ได้ 0.12 แต่ ROUND ได้ 0.13
3) round(2.675, 2) ได้ 2.67 แต่ ROUND ได้ 2.68 ส่วน round(1.005, 2) ได้ 1.00 แต่ ROUND ได้ 1.01
4) .round(2) ของ pandas ไม่ตรง 103 บรรทัด และยังให้ผลไม่ตรงกับ round() ของ Python เองอีก 87 บรรทัด (round() ไม่ตรง Excel 16 บรรทัด)
5) ติดลบ round(-2.5) ได้ -2 แต่ ROUND ได้ -3 ระวังตอนทำใบลดหนี้
6) f"{0.125:.2f}" แสดงผลเป็น 0.12 ตัวเลขในรายงานก็ปัดผิดแบบเดียวกัน

วิธีแก้ทำทีละขั้นแบบนี้
1) ใช้ Decimal ซึ่งเป็นโมดูลมาตรฐานของ Python ไม่ต้องติดตั้งเพิ่ม และตั้งวิธีปัดเป็น ROUND_HALF_UP คือปัดครึ่งออกจากศูนย์แบบเดียวกับ Excel
2) แปลงตัวเลขเป็นข้อความก่อน Decimal(str(x)) เพื่อไม่ให้ค่าเพี้ยนจาก float ติดเข้ามา
3) คูณอัตรา VAT ใน Decimal ด้วย Decimal(str(มูลค่า)) * Decimal("0.07") แล้วค่อยปัด
4) ใส่ผลกลับเข้า DataFrame ด้วย df["มูลค่า"].map(vat_excel)

แล้วจะรู้ได้ยังไงว่าแก้ถูกแล้ว? เช็ก 3 อย่าง เทียบกับคอลัมน์ VAT จาก Excel ทุกบรรทัดต้องไม่ตรงเป็น 0 (หลังแก้ได้ 0) ยอด VAT รวมต้องเท่ากัน (หลังแก้ 548,738.78 เท่ากันทั้งสองฝั่ง) และค่าทดสอบ 8 ค่าต้องตรงกับสูตร ROUND ครบ (ตรงครบ) ผมใส่ assert ไว้ท้ายโน้ตบุ๊ก ถ้ายอดไม่ตรง โค้ดจะหยุดทันที ไม่ปล่อยไฟล์ผิดออกไป

สิ่งที่รันจริงและไม่ได้รัน: รันจริงบนเครื่องด้วย Python 3.13.5 กับ pandas 3.0.6 แล้วลองซ้ำกับ pandas 2.2.3 ได้ 103 / 16 / 0 บรรทัดเหมือนกัน ข้อมูลใบแจ้งหนี้ทั้งหมดสมมติขึ้นเอง คอลัมน์ VAT ฝั่ง Excel คำนวณด้วยสูตร ROUND ใน LibreOffice Calc ซึ่งให้ผลตรงกับตัวอย่างในหน้าเอกสาร ROUND ของ Microsoft (ROUND(2.15, 1) = 2.2 และ ROUND(-1.475, 2) = -1.48) แต่ยังไม่ได้เปิดใน Microsoft Excel จริง และยังไม่ได้ลองใน Colab

อยากได้ไฟล์ใบแจ้งหนี้ตัวอย่าง โน้ตบุ๊กก่อน-หลังแก้ ฟังก์ชัน round_excel และเช็กลิสต์ไปลองกับงานตัวเอง พิมพ์ "สนใจ" ไว้ใต้โพสต์

ถ้าอยากต่อยอดเรื่องเตรียมข้อมูลจาก Excel ให้พร้อมใช้กับ Python ผมมีเล่ม Excel Killer — Data Cleansing อยู่ใน DataLover 4 Kings eBooks เป็นไฟล์ PDF ส่งทางอีเมล

ไฟล์ของคุณปัด VAT ด้วยอะไร round() / .round() หรือ Decimal? คอมเมนต์มาเลย

อ้างอิง (อ่านเมื่อ 3 พ.ย. 2026):
Python docs, Built-in Functions: round() (เอกสาร Python 3.15.2): https://docs.python.org/3/library/functions.html
Python docs, decimal — ROUND_HALF_UP (เอกสาร Python 3.15.2): https://docs.python.org/3/library/decimal.html
pandas docs, Series.round: https://pandas.pydata.org/docs/reference/api/pandas.Series.round.html
NumPy docs, numpy.round (v2.5): https://numpy.org/doc/stable/reference/generated/numpy.round.html
Microsoft Support, ROUND function: https://support.microsoft.com/en-us/office/round-function-c018c5d8-40fb-4053-90b1-b3e7f61a213c

THEELA | Data Engineering • Big Data • Cloud • Data Strategy
ผู้สร้าง DataLover — ถ่ายทอดประสบการณ์ Data จากงานจริงสู่การใช้งานจริง

#ปัดเศษ #ตรวจข้อมูล

9/10 คือจำนวนคำถาม HR ที่ค้นเจอหน้าที่ถูกในคู่มือบริษัท โดยไม่ต้องเรียก API สักตัว และนี่คือสกิลแรกจาก 5 สกิล AI ที่สายด...
02/11/2026

9/10 คือจำนวนคำถาม HR ที่ค้นเจอหน้าที่ถูกในคู่มือบริษัท โดยไม่ต้องเรียก API สักตัว และนี่คือสกิลแรกจาก 5 สกิล AI ที่สายดาต้าควรมีในปี 2026

ทุกข้อทำเป็นโปรเจกต์เล็กๆ ได้ 1 ชิ้น รันจริงบนเครื่อง (ไม่ใช่ Colab) ด้วยข้อมูลสมมติ และมีวิธีตรวจว่าใช้ได้จริง

1. RAG ให้ AI ตอบจากคู่มือบริษัทคุณเอง
ปัญหา: ถาม AI เรื่องนโยบายบริษัท แล้วได้คำตอบทั่วไปที่ไม่ใช่ของบริษัทคุณ
โปรเจกต์: ค้นคู่มือ HR สมมติ 12 หน้าด้วย TF-IDF แล้วแนบหน้าที่เจอไปกับคำถาม
ผล: อันดับ 1 ถูก 9/10 และอยู่ใน 3 อันดับแรก 10/10 ข้อที่พลาดคือคำถามที่ใช้คำไม่ตรงกับคู่มือ จึงแนบ 3 หน้าแทนหน้าเดียว

2. Evals ให้คะแนนคำตอบ AI ก่อนเชื่อ
ปัญหา: คำตอบ AI ดูน่าเชื่อ แต่ไม่มีใครรู้ว่าถูกกี่ข้อ
โปรเจกต์: ชุดทดสอบ 10 ข้อ ตรวจว่าคำตอบมีตัวเลขที่ต้องมีและอ้างเลขหน้าถูก (ในโพสต์นี้ใช้ตัวอย่างคำตอบที่เตรียมไว้ ไม่ใช่คำตอบจาก AI จริง)
ผล: ผ่าน 7/10 จับได้ 3 แบบ คือตัวเลขผิด ไม่อ้างหน้า และตอบขัดนโยบาย

3. MCP ให้ AI อ่าน Excel หรือฐานข้อมูลผ่านเครื่องมือที่คุณคุม
ปัญหา: ก๊อปตารางไปวางในแชตทีละชุด ข้อมูลหลุดง่ายและไม่อัปเดต
โปรเจกต์: MCP server 2 tool แบบอ่านอย่างเดียว ดึงยอดค่าใช้จ่ายแผนกจาก SQLite
ผล: ยอดจาก tool 120,500 ตรงกับ SQL ตรง 120,500 และถามแผนกที่ไม่มีได้ error กลับมา ไม่ใช่ตัวเลขมั่ว

4. Memory ให้ AI จำสิ่งที่คุณบอกไว้ข้ามแชต
ปัญหา: เปิดแชตใหม่ ต้องอธิบายรูปแบบรายงานใหม่ตั้งแต่ต้น
โปรเจกต์: ความจำแบบ SQLite บอกใหม่ทับของเดิม สั่งลืมได้ และโหลดก่อนเริ่มแชตใหม่
ผล: แชตใหม่จำได้ 3/3 เรื่อง ค่าเก่าถูกทับ เรื่องที่สั่งลืมหายจริง

5. Harness ด่านตรวจโค้ดที่ AI เขียน ก่อนเอาไปใช้
ปัญหา: โค้ดจาก AI รันผ่านกับตัวอย่างเดียว แต่พังกับข้อมูลจริง
โปรเจกต์: ruff + pytest 6 เคส ตรวจฟังก์ชันแปลงวันที่ พ.ศ. (โค้ดร่างเขียนขึ้นเป็นตัวอย่าง ไม่ใช่ผลจาก AI จริง)
ผล: ร่างแรก 2 failed และมี import เกิน แก้แล้ว 6 passed และ ruff ผ่าน

เช็กลิสต์เริ่มทำ เซฟไว้ได้เลย
RAG: คู่มือของทีม 10–20 หน้า + คำถาม 10 ข้อพร้อมเลขหน้าเฉลย
Evals: ชุดคำถามเดิม รันซ้ำหลังแก้ prompt ดูว่าผ่านกี่ข้อ
MCP: tool อ่านอย่างเดียว 1–2 ตัว เทียบผลกับ SQL ตรง
Memory: เก็บความชอบ 3 เรื่อง เปิดแชตใหม่ต้องจำได้ครบ และลืมได้เมื่อสั่ง
Harness: ruff + pytest ก่อนรับโค้ดจาก AI ไม่ผ่าน = ไม่ใช้

เริ่มสาย IT ตั้งแต่ปี 2548
AI เก่งแค่ไหน ก็ต้องมีวิธีตรวจที่วัดได้

5 ข้อนี้ คุณอยากเริ่มข้อไหนก่อน? คอมเมนต์เลข 1–5

อยากได้ 5 โปรเจกต์ตัวอย่างนี้ (โค้ด ข้อมูลสมมติ และวิธีรัน) พิมพ์ "สนใจ" ในคอมเมนต์

THEELA | Data Engineering • Big Data • Cloud • Data Strategy
ผู้สร้าง DataLover — ถ่ายทอดประสบการณ์ Data จากงานจริงสู่การใช้งานจริง

#สายดาต้า #ทำงานกับข้อมูล ิศ

ยอดตกแค่ 2.9% แต่กราฟดิ่งครึ่งจอ แก้ได้ด้วยโค้ด 4 บรรทัดลองนึกภาพ เช้าวันประชุมผลประกอบการ คุณส่งกราฟยอดขายรายเดือนจาก P...
02/11/2026

ยอดตกแค่ 2.9% แต่กราฟดิ่งครึ่งจอ แก้ได้ด้วยโค้ด 4 บรรทัด

ลองนึกภาพ เช้าวันประชุมผลประกอบการ คุณส่งกราฟยอดขายรายเดือนจาก Python เข้ากลุ่ม ผู้บริหารตอบกลับทันที "ต.ค. ยอดดิ่งขนาดนี้ เกิดอะไรขึ้น?"
ทั้งที่ยอดจริงลดจาก ก.ย. แค่ 30,000 บาท หรือ 2.9% แถมเดือนบนแกนเรียงมั่ว ก.ค. มาก่อน ม.ค. และแกนขึ้นเลข 0.99 ถึง 1.04 มุมบนเขียน 1e6 ไม่มีใครรู้ว่าหน่วยอะไร
แล้วต้องนั่งอธิบายกราฟ แทนที่จะได้คุยเรื่องแผน

ผมรันจริงบนเครื่อง (ไม่ใช่ Colab) ด้วย pandas 3.0.6 กับ matplotlib 3.11.2 ข้อมูลสมมติยอดขาย 10 เดือน ม.ค.–ต.ค. ได้ 4 กับดักนี้ครบในกราฟเดียว

1. แกนไม่เริ่มที่ 0
matplotlib ตั้งแกนเองที่ 987,250 ถึง 1,047,750 ยอด ก.ย. → ต.ค. ลด 30,000 (−2.9%) แต่เส้นดิ่งกินความสูงแกน 49.6% เกือบครึ่งจอ

2. เดือนไทยเป็นข้อความ groupby เลยเรียงตามตัวอักษร
ได้ลำดับ ก.ค. ก.พ. ก.ย. ต.ค. พ.ค. ม.ค. มิ.ย. มี.ค. ส.ค. เม.ย. ม.ค. ไปอยู่ลำดับที่ 6 เส้นจึงขึ้นลงมั่ว

3. ตัวเลขหลักล้านถูกย่อ
แกนขึ้น 0.99, 1.00 … 1.04 แล้วมุมบนเขียน "1e6" คนอ่านต้องคูณล้านเอาเอง

4. กราฟไม่บอกข้อสรุป
ไม่มีหัวกราฟ ไม่มีตัวเลขกำกับ ไม่มี % เปลี่ยนแปลง คนอ่านเลยตัดสินจากความชันของเส้นอย่างเดียว

วิธีแก้ 1 กับดัก = 1 บรรทัด

df["month"] = pd.period_range("2026-01", periods=10, freq="M") # 2 เรียงเดือนด้วยวันที่จริง
ax.set_ylim(bottom=0, top=s.max() * 1.15) # 1 แกนเริ่มที่ 0
ax.yaxis.set_major_formatter(FuncFormatter(lambda v, _: f"{v:,.0f}")) # 3 ตัวเลขเต็มมีลูกน้ำ
ax.set_title(f"ต.ค. ยอดขาย {pct:+.1f}% จาก ก.ย.") # 4 หัวกราฟบอกข้อสรุป

แล้วตรวจก่อนส่งด้วย assert 4 บรรทัด ถ้าข้อไหนไม่ผ่าน สคริปต์หยุดเอง กราฟผิดไม่หลุดไปถึงผู้บริหาร

assert ax.get_ylim()[0] == 0 # แกนเริ่ม 0
assert [t.get_text() for t in ax.get_xticklabels()] == th # เดือนเรียง ม.ค. → ต.ค.
assert ax.yaxis.get_offset_text().get_text() == "" # ไม่มี 1e6
assert "," in ax.get_yticklabels()[2].get_text() # ตัวเลขมีลูกน้ำ

ผลรันจริง: ALL CHECKS PASSED แกนใหม่ 0 ถึง 1,201,750 ตัวเลขบนแกน 0 / 200,000 / 400,000 … หัวกราฟขึ้น "ต.ค. ยอดขาย -2.9% จาก ก.ย." ตรงกับที่คำนวณจากข้อมูล เส้นเดียวกันจากที่ดูเหมือนดิ่ง กลายเป็นแทบนิ่ง ซึ่งคือความจริงของข้อมูลชุดนี้
ถ้าภาษาไทยในกราฟขึ้นเป็นกล่อง □□□ ให้ตั้งฟอนต์ไทยก่อน (ในโค้ดตัวอย่างใช้ฟอนต์ Sarabun)

ผมเริ่มสาย IT ตั้งแต่ปี 2548 และเคยทำ Dashboard ผู้บริหาร เตรียมข้อมูล BI ให้ Tableau / Power BI งานจริงคือเปลี่ยนข้อมูลดิบให้เป็นคำตอบของคำถามธุรกิจ กราฟที่สวยแต่ทำให้ตีความผิด คือกราฟที่ไม่ได้ตอบคำถาม
"ข้อมูลที่มีคุณค่า ไม่ใช่ข้อมูลที่มีจำนวนมากที่สุด แต่เป็นข้อมูลที่ถูกต้อง เชื่อถือได้ และนำไปใช้สร้างผลลัพธ์ได้จริง" กราฟก็เหมือนกัน

นี่แค่ 1 กราฟ ในเล่ม Python Data Visualization ยังมีกราฟแบบที่ผู้บริหารอ่านจบ การตั้งฟอนต์ไทย ไปจนถึงทำรายงานซ้ำอัตโนมัติ

ซึ่งอยู่ใน DataLover 4 Kings

AutoWork 2.0 เปลี่ยนรายงานที่ทำมือทุกเดือนเป็นสคริปต์รันซ้ำ

Python Data Visualization ทำกราฟที่อ่านถูกตั้งแต่ครั้งแรก

AI Data Automation ให้ AI ช่วยสรุปต่อจากข้อมูลที่ตรวจแล้ว

แถม Mini App + Scripts เอาไปรันต่อได้
PDF 4 เล่ม รวม 200+ หน้า ส่งทางอีเมลทันทีหลังชำระเงิน มีบทติดตั้ง Python ใช้กับ Excel ทุกเวอร์ชันและ Google Sheets เครื่องมือฟรีทั้งหมด ยกเว้น OpenAI (มีค่าใช้จ่าย) อัปเดตตลอดชีพ ขอเงินคืนได้ทันทีเมื่อแจ้ง
1,490 บาท ครบ 4 เล่ม

กราฟของคุณโดนข้อไหนบ่อยสุด 1–4? คอมเมนต์เลขไว้ได้เลย
พิมพ์ "สนใจ" ใต้โพสต์ แล้วผมส่งรายละเอียด 4 Kings พร้อมสคริปต์ตัวอย่างชุดนี้ให้

THEELA | Data Engineering • Big Data • Cloud • Data Strategy
ผู้สร้าง DataLover — ถ่ายทอดประสบการณ์ Data จากงานจริงสู่การใช้งานจริง

#กราฟ #ทำรายงาน #มนุษย์เงินเดือน #กราฟไม่หลอกตา

120 → 64 ยอดคนลงชื่ออบรมหายไป 56 คน และไม่มี error สักบรรทัดบทเรียน 20 ปี Data EP.6 · เซฟไว้ก่อนทำรายงาน EP.5ลองนึกภาพ เ...
02/11/2026

120 → 64 ยอดคนลงชื่ออบรมหายไป 56 คน และไม่มี error สักบรรทัด

บทเรียน 20 ปี Data EP.6 · เซฟไว้ก่อนทำรายงาน EP.5

ลองนึกภาพ เช้าวันจันทร์ คุณรันสคริปต์เดิมที่ใช้สรุปคำตอบ Google Forms มาทุกสัปดาห์ ฟอร์มมีคนตอบ 120 คน แต่ตารางสรุปรายแผนกได้แค่ 64

สิ่งที่เปลี่ยนมีแค่อย่างเดียว เจ้าของฟอร์มแก้ชื่อคำถามจาก "แผนก" เป็น "แผนก / ฝ่าย"

ทำไมถึงหายเงียบ
1. pd.concat เจอหัวคอลัมน์ไม่ตรงกัน เลยสร้างคอลัมน์ใหม่ แถวสัปดาห์ 2 ในคอลัมน์ "แผนก" ว่างทั้งหมด (ว่าง 46.7% กับ 53.3% แยกกันคนละคอลัมน์)
2. groupby ค่าเริ่มต้นคือ dropna=True แถวที่แผนกว่างจึงถูกตัดทิ้งตอนสรุป โดยไม่มีคำเตือน

เช็ก 3 ข้อก่อนส่งรายงาน (เซฟไว้แปะหัวสคริปต์)
1. คอลัมน์ตรงสเปกไหม เช็กทีละไฟล์ ว่าขาดหรือเกินอะไร
2. ค่าว่างต่อคอลัมน์เป็นกี่ % ถ้าคอลัมน์หลักว่างเกือบครึ่ง แปลว่ามีอะไรเปลี่ยน
3. แถวเข้า = แถวออก ยอดรวมในสรุปต้องเท่ากับจำนวนคำตอบในฟอร์ม

วิธีแก้: map ชื่อใหม่กลับเป็นชื่อเดิมด้วย RENAME = {"แผนก / ฝ่าย": "แผนก"} ก่อน concat แล้วปิดท้ายด้วย assert 3 ตัว ถ้าไม่ผ่าน สคริปต์หยุดเอง ไม่ส่งรายงานผิดออกไป
ทริกเสริม: groupby("แผนก", dropna=False) จะโชว์แถวที่แผนกว่างให้เห็นแทนการตัดทิ้ง

ผลหลังแก้: รวม 120 ครบ assert ผ่าน และพอลองแก้ชื่อคำถามอีกรอบ สคริปต์หยุดพร้อมข้อความ "คอลัมน์ไม่ครบ"

ข้อมูลสมมติ รันจริงบนเครื่อง (ไม่ใช่ Colab) ด้วย pandas 3.0.6

บทเรียนจาก 20 ปีในงาน Data: งานที่รันทุกวัน ต้องตรวจต้นทางก่อนรัน ไม่ใช่รอให้พังแล้วค่อยตาม

นี่เป็นแค่ส่วนหนึ่งของการทำให้งานข้อมูลรายสัปดาห์เชื่อถือได้ ถ้าคุณอยากต่อยอดเป็นระบบรวมไฟล์อัตโนมัติพร้อมตรวจคุณภาพตั้งแต่ RAW → CLEAN → CURATED แนวคิดนี้อยู่ใน DataLover 4 Kings (AutoWork / AI Data Automation, Mini App + Scripts)

สคริปต์หรือสูตรที่เคยใช้ได้ดีๆ แล้ววันหนึ่งผลเพี้ยนโดยไม่มี error ของคุณเกิดจากอะไร? เล่าในคอมเมนต์ได้เลย

อยากได้สคริปต์เช็ก 3 ข้อชุดนี้ พร้อมไฟล์ตัวอย่างและโน้ตบุ๊ก พิมพ์ "สนใจ" ในคอมเมนต์

เซฟโพสต์นี้ไว้ แล้วติดตาม EP.7

THEELA | Data Engineering • Big Data • Cloud • Data Strategy
ผู้สร้าง DataLover — ถ่ายทอดประสบการณ์ Data จากงานจริงสู่การใช้งานจริง

#บทเรียน20ปีData #เซฟไว้ก่อนทำรายงาน #สายดาต้า #ทำงานกับข้อมูล

-58.4% กับ -2.4% มาจากข้อมูลชุดเดียวกัน ต่างกันแค่ว่าคุณรู้หรือไม่ว่าไฟล์ร้านออนไลน์ขาดไป 4 วันลองนึกภาพเช้าวันจันทร์ 10...
02/11/2026

-58.4% กับ -2.4% มาจากข้อมูลชุดเดียวกัน ต่างกันแค่ว่าคุณรู้หรือไม่ว่าไฟล์ร้านออนไลน์ขาดไป 4 วัน

ลองนึกภาพเช้าวันจันทร์ 10 นาทีก่อนประชุม คุณรวมไฟล์ยอดขาย 3 ช่องทาง (หน้าร้าน ร้านออนไลน์ LINE) แล้วส่งให้ AI สรุป ตารางที่ AI เห็นบอกว่าร้านออนไลน์ยอดตก 58.4% ถ้า AI สรุปตามตัวเลขนี้ คุณก็อาจเอาไปพูดในห้องประชุมว่าต้องเร่งทำโปรโมชั่น แล้วทีมออนไลน์ก็ตอบว่า "สัปดาห์นี้ยอดปกตินะ"

ไม่มีใครผิด ไฟล์ร้านออนไลน์ที่ได้มาถูก export ไว้ตั้งแต่เช้าวันพฤหัสฯ ที่ 29 ต.ค. ข้อมูลสัปดาห์นี้จึงมีแค่ 3 จาก 7 วัน และไม่มีใครรู้

ผมจำลองเหตุการณ์นี้ด้วยข้อมูลสมมติ รันจริงบนเครื่อง (ไม่ใช่ Colab) ด้วย pandas 3.0.6
ตารางรวมแบบเดิม: LINE +5.6% · ร้านออนไลน์ -58.4% · หน้าร้าน -6.5%
พอติดป้ายข้อมูล: LINE OK · หน้าร้าน OK · ร้านออนไลน์ STALE (ข้อมูลถึง 28 ต.ค. ขาด 4 วัน)
เทียบร้านออนไลน์แบบวันต่อวัน 3 วันต่อ 3 วัน: -2.4%
ปิดท้ายด้วย assert: ผ่าน

ทำไมถึงเกิด
AI ไม่รู้ว่าไฟล์เก่าหรือไม่ครบ มันเห็นแค่ตัวเลข แล้วเอา 3 วันไปเทียบกับ 7 วันเหมือนเป็นสัปดาห์เต็ม
ไฟล์ export ไม่มีป้ายบอกว่ามาจากไหน ดึงเมื่อไร และข้อมูลถึงวันไหน

เรื่องนี้ไม่ได้เกิดแค่ในตัวอย่างของผม รายงาน Data Streaming ปี 2569 ของ Confluent (ผ่านกรุงเทพธุรกิจ) ระบุว่าผู้นำไอทีไทย 80% ตรวจสอบแหล่งที่มา ความสดใหม่ และคุณภาพของข้อมูลได้ไม่ชัดเจน และ 79% บอกว่าข้อมูลถูกเก็บแยกกันในหลายระบบ
ที่มา: https://www.bangkokbiznews.com/tech/ai/1244482

วิธีแก้ 4 ขั้น (เซฟไว้)
1. ติดป้ายทุกไฟล์ตอนรวม ใส่ source และ loaded_at
d.assign(source=name, loaded_at=pd.Timestamp(exported[name]))
2. เช็กความสดใหม่ทีละแหล่ง หา last_date และ days_missing แล้วให้ check_status เป็น OK หรือ STALE
fresh["days_missing"] = (asof - fresh["last_date"]).dt.days
fresh["check_status"] = np.where(fresh["days_missing"] == 0, "OK", "STALE")
3. ส่งให้ AI เฉพาะแหล่งที่ OK ส่วนแหล่งที่ STALE ให้เทียบเฉพาะวันที่มีข้อมูลเท่ากัน
to_ai = df[df["check_status"] == "OK"]
4. ปิดท้ายด้วย assert
assert (to_ai["check_status"] == "OK").all()

บรรทัดที่เติมใน prompt
"ก่อนสรุป ให้บอกช่วงวันที่ของข้อมูลแต่ละแหล่ง ถ้าแหล่งไหนวันไม่ครบ ห้ามเปรียบเทียบ ให้แจ้งว่าข้อมูลไม่ครบแทน"

เช็ก 4 ข้อก่อนส่งไฟล์ให้ AI
1. ทุกแหล่ง days_missing = 0 คือข้อมูลถึงวันล่าสุดที่ต้องมี
2. rows ตรงกับจำนวนวัน (ตัวอย่างนี้ 2 สัปดาห์ = 14 แถวต่อช่องทาง ร้านออนไลน์มีแค่ 10)
3. คำตอบ AI ต้องขึ้นต้นด้วยช่วงวันที่ของข้อมูล ถ้าไม่ขึ้น อย่าเพิ่งเชื่อ
4. ตัวเลขที่แรงผิดปกติ (เกิน ±30%) ให้เช็กป้ายข้อมูลก่อนพูดในประชุม

ผมเริ่มสาย IT ตั้งแต่ปี 2548 และเชื่อว่า Data Engineering คือการสร้างความเชื่อมั่นในข้อมูลทั้งระบบ ไม่ใช่แค่ย้ายข้อมูล ป้าย 3 คอลัมน์นี้เป็นจุดเริ่มต้นที่เล็กที่สุดของความเชื่อมั่นนั้น

ข้อมูลที่มีคุณค่า ไม่ใช่ข้อมูลที่มีจำนวนมากที่สุด แต่เป็นข้อมูลที่ถูกต้อง เชื่อถือได้ และนำไปใช้สร้างผลลัพธ์ได้จริง

ทีมคุณรวมกี่ไฟล์ก่อนประชุม? คอมเมนต์ตัวเลขไว้ได้เลย

อยากได้ไฟล์ตัวอย่าง 3 ไฟล์ สคริปต์ และโน้ตบุ๊กที่ใช้รันในโพสต์นี้ พิมพ์ "สนใจ" ใต้โพสต์
เซฟโพสต์นี้ไว้ใช้ก่อนประชุมวันจันทร์ และติดตามข้อมูลพร้อมให้ AI EP.3

THEELA | Data Engineering • Big Data • Cloud • Data Strategy
ผู้สร้าง DataLover — ถ่ายทอดประสบการณ์ Data จากงานจริงสู่การใช้งานจริง

ุปข้อมูล #รายงานยอดขาย #ข้อมูลพร้อมให้AI

ชื่อคอลัมน์มีสระอำ แล้วยอด VAT หายไป 235,807 บาท? แก้ด้วยเครื่องหมายคำพูด "..."ผมลองทำไฟล์ยอดขายสมมติขึ้นมา 240 รายการ ห...
02/11/2026

ชื่อคอลัมน์มีสระอำ แล้วยอด VAT หายไป 235,807 บาท? แก้ด้วยเครื่องหมายคำพูด "..."

ผมลองทำไฟล์ยอดขายสมมติขึ้นมา 240 รายการ หัวคอลัมน์เป็นภาษาไทยทั้งหมด แล้วเขียน pandas ให้บวก VAT 7% เข้าไปในคอลัมน์ จำนวนเงิน แบบที่หลายคนเขียนกันปกติ

df.assign(จำนวนเงิน=df["จำนวนเงิน"] * 1.07)

รันผ่าน ไม่มี error สักบรรทัด แต่ยอดรวมออกมา 3,368,665 บาท ซึ่งเป็นยอดก่อน VAT ยอดที่ควรได้คือ 3,604,472 บาท หายไป 235,807 บาทแบบเงียบ ๆ

พอเปิดไฟล์ผลลัพธ์ดู มีคอลัมน์ จำนวนเงิน สองคอลัมน์ หน้าตาเหมือนกันเป๊ะ (รูปที่ 1) จากเดิม 10 คอลัมน์ กลายเป็น 11 คอลัมน์ ยอดที่บวก VAT แล้วไปอยู่ในคอลัมน์ใหม่ ส่วนคอลัมน์เดิมที่รายงานดึงไปใช้ยังเป็นยอดเก่า

ต้นเหตุคือสระอำ ตอน Python อ่านโค้ด มันจะแปลงชื่อตัวแปรทุกชื่อเป็นรูปแบบมาตรฐานที่เรียกว่า NFKC (วิธีจัดตัวอักษรให้เป็นแบบเดียวกัน) ในขั้นนี้ สระอำ ถูกแยกเป็นนิคหิต (วงกลมเล็กบนตัวอักษร) กับสระอา ตาเราเห็นเหมือนเดิม แต่คอมพิวเตอร์เห็นเป็นคนละตัวอักษร ชื่อ จำนวนเงิน ยาวขึ้นจาก 9 เป็น 10 ตัวอักษร (รูปที่ 2)

ส่วนชื่อที่อยู่ในเครื่องหมายคำพูด "..." เป็นข้อความธรรมดา Python ไม่แปลง และชื่อหัวคอลัมน์ที่อ่านมาจาก Excel ก็ยังเป็นสระอำแบบเดิม ปัญหาจึงเกิดเฉพาะตอนที่เราพิมพ์ชื่อคอลัมน์ลงในโค้ดตรง ๆ โดยไม่มี "..." ครอบ

ผมไล่ลองดูว่าเขียนแบบไหนพังบ้าง เจอ 6 จุด (รูปที่ 3)
1) df.assign(จำนวนเงิน=...) ได้คอลัมน์ใหม่แทนการทับของเดิม ไม่มี error อันนี้อันตรายสุด
2) .agg(จำนวนรายการ=...) ชื่อคอลัมน์ผลลัพธ์เปลี่ยนไป พอเรียก "จำนวนรายการ" ก็เจอ KeyError
3) df.จำนวนเงิน เจอ AttributeError
4) df.query("จำนวนเงิน > 5000") เจอ UndefinedVariableError ใส่ backtick ครอบชื่อแล้วก็ยังพัง
5) row.จำนวนเงิน ตอนวนแถวด้วย itertuples เจอ AttributeError
6) dict(จำนวนเงิน=...) ได้ key ที่ไม่ตรงกับชื่อคอลัมน์ เอาไปใช้ต่อก็เจอ KeyError

ในไฟล์ตัวอย่างมี 4 จาก 10 หัวคอลัมน์ที่มีสระอำ คือ ลำดับ จำนวน จำนวนเงิน และ คำอธิบาย ทุกคอลัมน์เสี่ยงแบบเดียวกัน

วิธีแก้มีกฎเดียว ชื่อคอลัมน์ภาษาไทยต้องอยู่ใน "..." เสมอ (รูปที่ 4)
1) จะทับคอลัมน์เดิม ใช้ df["จำนวนเงิน"] = df["จำนวนเงิน"] * 1.07
2) ถ้าอยากใช้ assign หรือ agg ใส่ชื่อแบบนี้ assign(**{"จำนวนเงิน": ...}) หรือ agg(**{"จำนวนรายการ": ("เลขที่เอกสาร", "count")})
3) แทน df.จำนวนเงิน ด้วย df["จำนวนเงิน"]
4) กรองแถวด้วย df[df["จำนวนเงิน"] > 5000] แทน query
5) วนแถวด้วย df.to_dict("records") แล้วเรียก row["จำนวนเงิน"]
6) สร้าง dict ด้วย {"จำนวนเงิน": 1} แทน dict(จำนวนเงิน=1)

แล้วจะรู้ได้ยังไงว่าแก้ถูกแล้ว? เช็ก 3 อย่าง จำนวนคอลัมน์ต้องเท่าเดิม (หลังแก้ได้ 10 คอลัมน์) ไม่มีคอลัมน์หน้าตาเหมือนกัน (หลังแก้เหลือ 0) และยอดรวมต้องเท่ากับยอดที่ควรเป็น (หลังแก้ได้ 3,604,472 ตรงกับยอดรวม VAT) ผมใส่ assert ไว้ท้ายสคริปต์ ถ้ายอดไม่ตรง สคริปต์จะหยุดทันที ไม่ปล่อยไฟล์ผิดออกไป

ผมเขียนสคริปต์เล็ก ๆ ไว้สแกนด้วย ชื่อ check_thai_names.py มันจะหาชื่อในโค้ดที่ถูกแปลงแล้วไม่ตรงกับเดิม และหาคอลัมน์หน้าตาเหมือนกันในไฟล์ Excel สคริปต์ก่อนแก้เจอ 1 จุด คือบรรทัด 4 สคริปต์หลังแก้เจอ 0

สิ่งที่รันจริงและไม่ได้รัน: รันจริงบนเครื่องด้วย Python 3.13.5 กับ pandas 3.0.6 ทั้ง 6 จุดลองซ้ำกับ pandas 2.2.3 ด้วย ได้ผลเหมือนกัน (รอบนี้ใช้ข้อมูลในหน่วยความจำ ไม่ได้อ่านจาก Excel) ข้อมูลยอดขายทั้งหมดสมมติขึ้นเอง ภาพหัวคอลัมน์ในรูปที่ 1 เปิดด้วย LibreOffice ยังไม่ได้เปิดใน Microsoft Excel จริง และยังไม่ได้ลองใน Colab

อยากได้ไฟล์ตัวอย่าง สคริปต์ก่อน-หลังแก้ สคริปต์สแกนชื่อ และเช็กลิสต์ไปลองกับงานตัวเอง พิมพ์ "สนใจ" ไว้ใต้โพสต์

ถ้าอยากต่อยอดเรื่องเตรียมข้อมูลจาก Excel ให้พร้อมใช้กับ Python ผมมีเล่ม Excel Killer — Data Cleansing อยู่ใน DataLover 4 Kings eBooks เป็นไฟล์ PDF ส่งทางอีเมล

ไฟล์ของคุณมีหัวคอลัมน์ที่มีสระอำกี่คอลัมน์? คอมเมนต์ตัวเลขมาเลย

อ้างอิง (อ่านเมื่อ 2 พ.ย. 2026):
Python Language Reference, 2. Lexical analysis (หัวข้อ 2.3.4 Non-ASCII characters in names), เอกสาร Python 3.15.2: https://docs.python.org/3/reference/lexical_analysis.html
PEP 3131 – Supporting Non-ASCII Identifiers, 1 พ.ค. 2007 (ใช้ตั้งแต่ Python 3.0): https://peps.python.org/pep-3131/

THEELA | Data Engineering • Big Data • Cloud • Data Strategy
ผู้สร้าง DataLover — ถ่ายทอดประสบการณ์ Data จากงานจริงสู่การใช้งานจริง

#ภาษาไทย #ตรวจข้อมูล

15,000 → 0 บาท จากโค้ดบรรทัดเดียวกันเป๊ะลองนึกภาพ สิ้นเดือนคุณรันสคริปต์คำนวณโบนัสตัวเดิมที่ใช้มาเป็นปี ส่งตัวเลขไปแล้ว ...
01/11/2026

15,000 → 0 บาท จากโค้ดบรรทัดเดียวกันเป๊ะ

ลองนึกภาพ สิ้นเดือนคุณรันสคริปต์คำนวณโบนัสตัวเดิมที่ใช้มาเป็นปี ส่งตัวเลขไปแล้ว แล้วมีคนถามกลับว่า "เดือนนี้ทำไมไม่มีใครได้โบนัสเลย?" ทั้งที่ยอดขายเกินเป้า 3 คน และสคริปต์ไม่มี error สักบรรทัด

สิ่งเดียวที่เปลี่ยนคือ pandas ในเครื่องถูกอัปเดตจาก 2.x เป็น 3.x

ผมรันสคริปต์เดียวกันบนเครื่องจริง 2 เวอร์ชัน (ไม่ใช่ Colab) กับข้อมูลสมมติ 6 แถว ผลออกมาแบบนี้

pandas 2.2.3 → โบนัสรวม 15000 | คนได้โบนัส 3
pandas 3.0.6 → โบนัสรวม 0 | คนได้โบนัส 0

เพี้ยนจาก 3 จุดที่ pandas 3.0.0 เปลี่ยนกติกา (เทียบกับเอกสาร What's new 3.0.0 แล้ว)

1) Copy-on-Write
บรรทัดแบบ df["bonus"][df["sales"] > 100000] = 5000 เป็น chained assignment ใน pandas 3 จะไปแก้ "สำเนา" ไม่ใช่ตารางจริง ตารางเลยไม่เปลี่ยน โบนัสเป็น 0 ทั้งหมด
pandas 3.0.6 ขึ้นคำเตือน ChainedAssignmentError สีแดง แต่สคริปต์รันต่อจนจบ
ข้อสังเกต: pandas 2.2.3 ก็เตือนล่วงหน้าแล้ว (FutureWarning + SettingWithCopyWarning) แค่หลายคนเลือกปิดคำเตือนไว้

2) ข้อความเป็น dtype str โดยค่าเริ่มต้น
โค้ดที่เช็ก if df["dept"].dtype == object เพื่อทำความสะอาดคอลัมน์ข้อความ ใน pandas 2 ผ่าน แต่ใน pandas 3 dtype จริงคือ str เลยไม่ผ่าน แล้วข้ามขั้นนั้นไปเงียบๆ
จุดนี้น่ากลัวสุด เพราะไม่มีคำเตือนเลยทั้ง 2 เวอร์ชัน

3) วันที่จากข้อความได้หน่วย microsecond
pd.to_datetime จากข้อความใน pandas 2 ได้ datetime64[ns] ใน pandas 3 ได้ datetime64[us] ถ้าโค้ดใช้ astype("int64") แล้วหารด้วยนาโนวินาทีต่อวันเอง ตัวเลขจะเล็กลง 1,000 เท่า
วันที่ของ E01 เป็นเลขวัน: 19737 → 19 และก็ไม่มีคำเตือนเช่นกัน

แก้ 4 บรรทัด ใช้ได้ทั้ง pandas 2 และ 3
• ต้นสคริปต์พิมพ์ pd.__version__ ให้รู้ว่ารันบนเวอร์ชันไหน
• ใช้ df.loc[df["sales"] > 100000, "bonus"] = 5000 ขั้นตอนเดียว
• เช็กคอลัมน์ข้อความด้วย pd.api.types.is_string_dtype(df["dept"])
• หาจำนวนวันด้วย (df["start"] - pd.Timestamp("1970-01-01")).dt.days
• ปิดท้ายด้วย assert ยอดที่ต้องตรง

รันโค้ดที่แก้แล้วบนทั้ง 2 เวอร์ชัน ได้ผลตรงกัน: โบนัสรวม 15000 คนได้ 3 is_string_dtype เป็น True เลขวัน E01 = 19737 และ assert ผ่าน

เช็กลิสต์ 4 ข้อ ก่อนรันสคริปต์สิ้นเดือน (เซฟไว้)
1. พิมพ์ pd.__version__ ต้นสคริปต์ ถ้าเปลี่ยนจาก 2.x เป็น 3.x ให้รีวิวโค้ดก่อน
2. ค้นในสคริปต์หา ][ ที่ตามด้วย = , == object และ astype("int64") กับคอลัมน์วันที่
3. รันเดือนที่รู้ยอดจริงแล้ว เทียบกับตัวเลขเดิม ต้องตรงเป๊ะ
4. เห็นคำเตือนสีแดง อย่าข้าม อ่านก่อนส่งตัวเลข

เอกสาร pandas เองก็แนะนำให้อัปเกรดเป็น 2.3 ก่อน แล้วทำให้โค้ดรันได้โดยไม่มีคำเตือน ค่อยขึ้น 3.0

ผมเริ่มสาย IT ตั้งแต่ปี 2548 งาน ETL และ pipeline รายวันสอนผมว่า "รันผ่าน" ไม่ได้แปลว่า "ตัวเลขถูก" ทุก pipeline ต้องมีจุดตรวจคุณภาพที่เทียบยอดกับสิ่งที่รู้ค่าอยู่แล้ว Data Engineering คือการสร้างความเชื่อมั่นในข้อมูลทั้งระบบ ไม่ใช่แค่ย้ายข้อมูล

ข้อมูลที่มีคุณค่า ไม่ใช่ข้อมูลที่มีจำนวนมากที่สุด แต่เป็นข้อมูลที่ถูกต้อง เชื่อถือได้ และนำไปใช้สร้างผลลัพธ์ได้จริง

3 จุดนี้เป็นแค่ส่วนเดียวของการทำงานกับข้อมูลให้ถูกตั้งแต่ต้น ถ้าอยากได้พื้นฐานครบทั้งชุด มี DataLover 4 Kings
• AutoWork 2.0 · AI Data Automation · Python Data Visualization
• PDF 4 เล่ม 200+ หน้า ส่งทางอีเมลทันทีหลังชำระเงิน
• มีบทติดตั้ง Python ให้ตั้งแต่ศูนย์
• ใช้เครื่องมือฟรีทั้งหมด ยกเว้น OpenAI ที่มีค่าใช้จ่าย
• แถม Mini App + Scripts
• อัปเดตเนื้อหาตลอดชีพ
• ใช้ได้กับ Excel ทุกเวอร์ชันและ Google Sheets
• ชุดเดียว 1,490 บาท
• ขอเงินคืนได้ทันทีเมื่อแจ้ง

สคริปต์ของคุณมีบรรทัด df[...][...] = อยู่ไหม? เจอจุดไหนใน 3 จุดนี้ คอมเมนต์บอกกันได้

สนใจ 4 Kings หรืออยากได้ไฟล์ตัวอย่าง (CSV + สคริปต์ก่อน/หลังแก้ + notebook) พิมพ์ "สนใจ" ใต้โพสต์

THEELA | Data Engineering • Big Data • Cloud • Data Strategy
ผู้สร้าง DataLover — ถ่ายทอดประสบการณ์ Data จากงานจริงสู่การใช้งานจริง

#คำนวณโบนัส

ที่อยู่

90/919 ต. ท่าอิฐ อ. ปากเกร็ด
Nonthaburi
11120

แจ้งเตือน

เป็นคนแรกที่รู้ข่าว: เราจะส่งอีเมลแจ้งเมื่อ DataLover โพสต์ข่าวสารและโปรโมชั่น อีเมลของคุณจะไม่ถูกนำไปใช้เพื่อวัตถุประสงค์อื่น และคุณสามารถยกเลิกการรับข่าวสารได้ทุกเมื่อ

ทางลัด

แชร์

บริการคอมพิวเตอร์และอุปกรณ์อิเล็กทรอนิกส์ใกล้เคียง