อ่านโค้ด Python ที่ AI เขียนให้ออก: 12 จุดที่คน Excel ต้องรู้
ทุกวันนี้พอบอก ChatGPT หรือ Claude ว่า “ช่วยสรุปยอดขายแยกตามเมืองให้หน่อย” มันก็พ่นโค้ด Python กลับมาให้กองนึง หรือถ้าใช้ Python in Excel ก็จะเจอโค้ดหน้าตาประมาณนี้
import pandas as pd
df = pd.read_excel('sales.xlsx')
df = df[df['sales'] > 1000]
summary = df.groupby('city')['sales'].sum().reset_index()
summary['sales_with_vat'] = summary['sales'] * 1.07
summary.to_excel('summary.xlsx', index=False)
เปิดมาเจอโค้ดแบบนี้แล้วอยากปิดหนีใช่มั้ยครับ? ผมเข้าใจเลย ตอนแรกผมก็มองว่ามันเป็นภาษาต่างดาว แต่พอตั้งสติดูดีๆ จริงๆ มันก็แค่ทำงานที่พี่ๆ ทำใน Excel กันทุกวันนี่แหละ เปิดไฟล์, กรองแถว, จัดกลุ่มหาผลรวม, เพิ่มคอลัมน์ VAT, แล้วเซฟกลับ จบ
ผมเลยอยากชวนคุยเรื่องนี้แบบคนเล่นกับ Excel มาด้วยกัน ขอย้ำตรงนี้ก่อน บทความนี้ไม่ได้สอนให้คุณเขียน Python เป็น ผมไม่ได้จะสอนติดตั้ง Python ไม่ได้จะสอน set up อะไรทั้งนั้น เป้าหมายเดียวคือ “อ่านออก” คือพอ AI เขียนโค้ดมาให้ คุณดูแล้วรู้ว่ามันกำลังทำอะไรอยู่ จะได้ตรวจได้ว่ามันทำถูกมั้ย หรือบอกมันให้แก้ตรงไหนได้
สัญญาเลยครับ จบบทความนี้ คุณจะกลับมาอ่านโค้ด 7 บรรทัดข้างบนนี้ออกทุกบรรทัด เดี๋ยวพอถึงช่วงท้าย ผมจะพากลับมาแกะให้ดูทีละบรรทัดเลยว่าแต่ละบรรทัดแปลว่าอะไร
แต่ก่อนจะไปถึงตรงนั้น ขอวาง “แว่น” ให้ก่อน 3 อัน
กฎ 3 ข้อก่อนเริ่ม
โค้ด pandas (ตัวที่ AI ชอบใช้จัดการตารางข้อมูล) มันดูยุ่บยั่บก็จริง แต่ 90% ของความงงมาจากการไม่รู้ “ไวยากรณ์พื้นฐาน” แค่ 3 ข้อนี้ พอจำได้ปุ๊บ โค้ดที่เคยดูเป็นภาษาต่างดาวจะเริ่มอ่านออกทันที
ก่อนอื่นขอเคลียร์คำที่จะเจอบ่อยสุดในโค้ดทุกบรรทัดก่อน นั่นคือ df ครับ มันคือชื่อที่ตั้งให้กับ “ทั้งตาราง” (ย่อมาจาก dataframe) เห็น df เมื่อไหร่ให้นึกถึงทั้งชีต Excel ทั้งหน้าได้เลย และอีกอย่างที่ต้องรู้คือ ชื่อที่อยู่ฝั่งซ้ายของ = (เช่น df, summary, total) คือ “ถังที่ติดป้ายชื่อไว้” เอาไว้เก็บผลลัพธ์ พอเห็นชื่อนี้ทีหลังก็คือกำลังหยิบของในถังนั้นมาใช้ต่อ
| กฎ | เห็นแบบนี้ | แปลว่า |
|---|---|---|
| (ก) จุดนำหน้าชื่อย่อ | pd. / np. | pd คือชื่อย่อของกล่องเครื่องมือ pandas, np คือ numpy เห็น pd. นำหน้า = กำลังไปหยิบเครื่องมือออกมาจากกล่องนั้น เช่น pd.read_excel(...) = “เอาเครื่องมือ read_excel จากกล่อง pandas มาใช้” |
| (ข) วงเล็บเหลี่ยม vs วงเล็บโค้ง | [ ] กับ ( ) | เหลี่ยม [ ] = หยิบของ / เลือก / ชี้ตำแหน่ง · โค้ง ( ) = สั่งทำงาน (เรียกฟังก์ชัน มักมีของใส่ข้างใน) เทียบกัน: df['sales'] = ชี้ไปที่คอลัมน์ sales · df.sum() = สั่งให้รวมยอด |
| (ค) จุดต่อกันเป็นสายพาน | .groupby(...).sum().reset_index() | จุด . หลายตัวต่อกัน = ทำงานทีละสเต็ปต่อเนื่องบนสายพาน อ่านจากซ้ายไปขวา: จัดกลุ่ม → รวมยอด → จัดตารางคืน |
กฎ 3 ข้อนี้แหละครับคือ “แว่น” ของเรา ใส่แว่นนี้แล้ว ส่วนถัดไปคือการเอาแว่นไปส่อง 12 จุดที่เจอบ่อยที่สุด พอจับ 12 จุดนี้ได้ โค้ด AI ส่วนใหญ่จะอ่านออก
12 จุดที่เจอบ่อย : เห็นแบบนี้ แปลว่าอะไร
แต่ละจุดผมจะเล่า 4 อย่างเสมอ: โค้ดตัวอย่าง → แปลว่าอะไร → เทียบกับ Excel → ถ้าอยากเจาะลึกตัวไหนไปดูที่ไหนต่อ พร้อมแล้วเริ่มเลย
Pattern 1 : alias import (ตั้งชื่อย่อ)
import pandas as pd
import numpy as np
แปลว่า import คือการเรียกกล่องเครื่องมือเข้ามาใช้ ส่วน as pd คือ “ตั้งชื่อเล่นให้มันว่า pd จะได้พิมพ์สั้นๆ” พอตั้งชื่อเล่นแล้ว ที่เหลือทั้งโค้ดถึงได้เห็น pd. กับ np. นำหน้าตลอด (เชื่อมกับกฎข้อ ก. เป๊ะ) เกือบทุกโค้ด pandas จะขึ้นด้วย 2 บรรทัดนี้
เทียบ Excel เหมือนการตั้ง Named Range ให้ช่วงที่ใช้บ่อย จะได้เรียกด้วยชื่อสั้นๆ แทนที่จะพิมพ์เต็มทุกครั้ง หรือนึกถึงตอนเปิด Power Query / Power Pivot ก่อนเริ่มทำงาน ต้อง “เปิดเครื่องมือ” ก่อนถึงจะใช้ได้
อยากเจาะลึกเครื่องมือยอดฮิตในกล่องเหล่านี้ ดูที่ read_csv และ array
Pattern 2 : เลือกคอลัมน์
df['sales']
df[['name', 'sales']]
แปลว่า df['sales'] คือหยิบคอลัมน์ชื่อ sales ออกมา 1 คอลัมน์ (pandas เรียกว่า Series) ส่วน df[['name', 'sales']] ที่มีวงเล็บเหลี่ยมซ้อนกัน 2 ชั้น คือหยิบหลายคอลัมน์ออกมาเป็นตารางย่อย สังเกตว่าชื่อคอลัมน์อยู่ในเครื่องหมายคำพูดเสมอ
เทียบ Excel ก็คือการเลือก column นั่นแหละ คลิกหัวคอลัมน์ A เลือกอันเดียว = df['sales'] · กด Ctrl ค้างแล้วเลือกหลายคอลัมน์ = df[['name', 'sales']]
อยากเจาะลึกการเลือกแบบชี้ตำแหน่งแถว/คอลัมน์ ดูที่หน้า loc กับ iloc
Pattern 3 : กรองแถว (boolean mask)
df[df['sales'] > 1000]
แปลว่า ข้างในตรง df['sales'] > 1000 คือการถามทีละแถวว่า “ยอดขายเกิน 1000 มั้ย” ได้คำตอบเป็น จริง/เท็จ ทุกแถว แล้ว df[...] ที่ครอบอยู่ก็เก็บเฉพาะแถวที่ตอบว่า “จริง” ไว้ เขาเรียกเทคนิคนี้ว่า boolean mask หรือพูดง่ายๆ คือ “เอาเงื่อนไขมาเป็นตะแกรงร่อนแถว”
เทียบ Excel ตรงกับการกด Filter แล้วตั้งเงื่อนไข “มากกว่า 1000” เป๊ะๆ เหลือไว้แต่แถวที่ผ่านเงื่อนไข แต่มีจุดต่างที่ต้องระวังมากๆ ครับ ถ้าโค้ดเขียนเป็น df = df[...] (เอาผลกรองทับชื่อ df เดิม) อันนี้ไม่เหมือน Filter ใน Excel ที่แค่ “ซ่อน” แถวไว้แล้วกดเอาคืนได้ แต่ pandas จะ “เขียนทับ” df ของเดิมไปเลย แถวที่ถูกกรองออกหายถาวรตลอดทั้งสคริปต์ที่เหลือ ถ้าอยากได้แถวพวกนั้นคืนต้องไปโหลดไฟล์หรือสร้าง df ขึ้นมาใหม่
อยากเจาะลึกการกรองแบบเขียนเงื่อนไขเป็นข้อความ ดูที่ query และ loc
Pattern 4 : สร้าง / แก้คอลัมน์
df['tax'] = df['sales'] * 0.07
แปลว่า ฝั่งซ้ายของ = คือคอลัมน์ใหม่ชื่อ tax (ถ้ายังไม่มีก็สร้างให้ ถ้ามีอยู่แล้วก็เขียนทับ) ฝั่งขวาคือสูตร เอาทั้งคอลัมน์ sales มาคูณ 0.07 pandas คิดให้ทุกแถวพร้อมกันในบรรทัดเดียว ไม่ต้องวนทีละแถว
เทียบ Excel เหมือนคุณไปที่คอลัมน์ว่างข้างๆ พิมพ์ =A2*0.07 แล้วลากสูตรลงทั้งคอลัมน์ ต่างกันแค่ pandas ทำให้ทั้งคอลัมน์รวดเดียวโดยไม่ต้องลาก
ตรงนี้แหละครับที่อยากให้สังเกตให้ดี ลองเทียบ 2 บรรทัดนี้ df['sales'] 0.07 กับ df['sales'] 1.07 ตัวคูณต่างกันนิดเดียวแต่ความหมายคนละเรื่องเลย 0.07 คือได้ “ภาษีล้วนๆ” (7% ของยอด) ส่วน 1.07 คือได้ “ราคารวมภาษีแล้ว” (ยอดเต็ม + อีก 7%) ตัวคูณต่าง = ความหมายต่าง นี่แหละครับคือสิ่งที่ต้องอ่านโค้ด AI ให้ออก เพราะ AI มันคูณเลขให้ก็จริง แต่มันคูณถูกตัวมั้ย คูณ 0.07 หรือ 1.07 ตรงกับที่เราต้องการรึเปล่า อันนี้คนตรวจต้องดูเอง ตรงกับเป้าหมายของบทความเป๊ะ ว่าอ่านออกเพื่อ “ตรวจได้ว่ามันทำถูกมั้ย”
อยากเจาะลึกการเอาฟังก์ชันมาใส่แต่ละค่า หรือเปลี่ยนชนิดข้อมูล ดูที่ apply และ astype
Pattern 5 : method chaining (สายพาน)
df.groupby('city')['sales'].sum().reset_index()
แปลว่า นี่คือหัวใจของการอ่านสายพาน (กฎข้อ ค) อ่านซ้ายไปขวาเป็นสายพานทีละสเต็ป: groupby('city') จัดกลุ่มตามเมือง → ['sales'] หยิบเฉพาะคอลัมน์ยอดขาย → .sum() รวมยอดในแต่ละกลุ่ม → .reset_index() ตรงตัวสุดท้ายนี้ไม่ใช่แค่จัดให้สวย แต่หลังจาก groupby แล้ว ตัวที่ใช้จัดกลุ่ม (เมือง) มันจะไปกลายเป็น “ดัชนี” (index) ตัวพิเศษ ไม่ใช่คอลัมน์ธรรมดา .reset_index() ทำหน้าที่ดึงเมืองกลับมาเป็นคอลัมน์ปกติ ตารางจะได้กลับมาหน้าตาเหมือนตารางทั่วไปที่เราเอาไปใช้ต่อได้ พูดอีกแบบ คือ “จัดกลุ่ม แล้วรวมยอด แล้วทำให้กลับมาเป็นตารางปกติ”
เทียบ Excel นี่คือ PivotTable ดีๆ นี่เอง ลากเมืองไปช่อง Rows ลากยอดขายไปช่อง Values ตั้งเป็น Sum ผลที่ได้เหมือนกันเป๊ะ
อยากเจาะลึกการจัดกลุ่มและจัดตารางคืน ดูที่ groupby และ reset_index
Pattern 6 : ⭐ ตัวดำเนินการของ pandas (& | ~) จุดที่คน Excel พลาดบ่อยที่สุด
ตรงนี้คือจุดที่ผมอยากให้ทุกคนหยุดอ่านช้าๆ เพราะเป็นจุดที่คน Excel งงมากที่สุด และเป็นจุดที่ทำให้ผลลัพธ์เพี้ยนแบบไม่รู้ตัวบ่อยที่สุดด้วย
df[(df['sales'] > 1000) & (df['city'] == 'Bangkok')]
แปลว่า เวลาจะกรองด้วยเงื่อนไขหลายข้อพร้อมกัน pandas ไม่ใช้ คำว่า and / or / not แบบที่เราคุ้น แต่ใช้สัญลักษณ์แทน:
– & = และ (AND) เงื่อนไขต้องจริงทั้งคู่
– | = หรือ (OR) เงื่อนไขจริงข้อใดข้อหนึ่งก็พอ
– ~ = ไม่ (NOT) กลับเงื่อนไขเป็นตรงข้าม
และที่สำคัญสุดๆ คือ เวลามีหลายเงื่อนไขต่อกันด้วย & หรือ | แต่ละเงื่อนไขต้องมีวงเล็บโค้งคร่อมไว้เสมอ ถ้าไม่ใส่วงเล็บ มันจะอ่านโจทย์ผิด คือจับคู่เงื่อนไขสลับกันมั่วไปหมด ได้คำตอบที่ไม่ใช่สิ่งที่เราตั้งใจ (เหตุผลทางเทคนิคคือ & มีลำดับการคำนวณมาก่อนเครื่องหมายเปรียบเทียบอย่าง > == แต่ตรงนี้ไม่ต้องจำก็ได้ จำแค่ว่า “ขาดวงเล็บ = อ่านโจทย์ผิด” พอ)
ที่น่ากลัวคือ การลืมวงเล็บนี้ บางทีมันก็ฟ้อง error เด้งขึ้นมาเลย (เห็นชัดว่าผิด) แต่บางกรณีมันดันคำนวณออกมาได้ปกติเฉยเลย เพียงแต่ได้ตัวเลขที่ผิด แบบที่เราไม่รู้ตัวว่าผิด อันหลังนี่แหละครับที่อันตรายสุด เพราะถ้าเอาไปส่งงานต่อโดยไม่ทันสังเกต ก็พังเงียบๆ นี่คือเหตุผลที่ผมให้ดาวจุดนี้
ลองดูแบบผิด vs แบบถูก:
# ❌ ผิด ไม่มีวงเล็บคร่อมแต่ละเงื่อนไข
# บางทีฟ้อง error เด้งขึ้นมา บางทีก็เงียบๆ ได้ผลลัพธ์ผิดแบบไม่รู้ตัว
df[df['sales'] > 1000 & df['city'] == 'Bangkok']
# ✅ ถูก มีวงเล็บคร่อมทุกเงื่อนไข
df[(df['sales'] > 1000) & (df['city'] == 'Bangkok')]
อีกตัวที่เจอบ่อยคือ .isin([...]) ใช้เช็คว่า “ค่าอยู่ในรายการนี้มั้ย” และ ~ ไว้กลับด้านเป็น “ไม่อยู่ในรายการ”:
df[df['city'].isin(['Bangkok', 'Chiang Mai'])] # เอาเฉพาะ 2 เมืองนี้
df[~df['city'].isin(['Bangkok', 'Chiang Mai'])] # เอาทุกเมืองยกเว้น 2 เมืองนี้
สังเกตว่าตรงนี้มีเงื่อนไขเดียว เลยไม่ต้องมีวงเล็บโค้งคร่อม (กติกาวงเล็บที่ย้ำไปข้างบนใช้ตอนมีหลายเงื่อนไขต่อกันด้วย & หรือ | เท่านั้น เงื่อนไขเดียวโดดๆ แบบ ~...isin() นี้ใส่ ~ นำหน้าได้เลย)
เทียบ Excel ใน Excel เราชินกับ AND(A2>1000, B2="Bangkok") หรือ OR(...) ใช่มั้ยครับ แต่ pandas สลับมาใช้สัญลักษณ์ & | ~ แทน และเพิ่มกติกาวงเล็บเข้ามา ตรงนี้แหละที่ดักคนเก่ง Excel มานักต่อนัก เพราะพอเขียนเป็น and ตามสัญชาตญาณปุ๊บ มันก็ฟ้อง error ทันที ส่วน .isin([...]) ก็เทียบได้กับการกรองแบบเลือกหลายค่าใน Filter dropdown ของ Excel นั่นเอง
เคล็ดอ่านโค้ดง่ายๆ: เห็น & | ~ ในวงเล็บเหลี่ยมของ df[...] เมื่อไหร่ ให้รู้ทันทีว่า “นี่คือกำลังกรองหลายเงื่อนไข” แล้วไล่อ่านทีละวงเล็บโค้ง แต่ละวงเล็บคือ 1 เงื่อนไข
อยากเจาะลึกการเขียนเงื่อนไขหลายข้อแบบอ่านง่ายขึ้น ดูที่ query (เขียนเป็นข้อความได้ เช่น df.query("sales > 1000 and city == 'Bangkok'") ในโหมดนี้ใช้ and ได้ ไม่ต้องใส่วงเล็บแบบข้างบน)
Pattern 7 : lambda
df['sales'].apply(lambda x: x * 1.07)
แปลว่า lambda x: x * 1.07 คือฟังก์ชันใช้แล้วทิ้งสั้นๆ บรรทัดเดียว อ่านว่า “เอาแต่ละค่า (เรียกมันว่า x) ไปคูณ 1.07” แล้ว .apply(...) ก็เอาฟังก์ชันนี้ไปวิ่งใส่ทุกค่าในคอลัมน์ พูดง่ายๆ คือ “เอาทุกค่าไปผ่านสูตรนี้”
เทียบ Excel เหมือนการเขียนสูตรในเซลล์แล้วลากลงทั้งคอลัมน์ ตรง x ก็คือ “ค่าในเซลล์ปัจจุบัน” นั่นเอง แค่ pandas ให้คุณเขียนสูตรนั้นเป็นฟังก์ชันเล็กๆ แทน
จุดสังเกตเล็กๆ ที่ทำให้อ่านโค้ดเก่งขึ้น ถ้าเห็นคูณ/บวกตรงๆ อย่าง df['sales'] * 0.07 แบบใน Pattern 4 = pandas คิดทั้งคอลัมน์รวดเดียว แต่ถ้าเห็น .apply(lambda...) = มันวิ่งทีละค่า (ช้ากว่าหน่อย แต่แลกมากับการทำของซับซ้อนกว่าได้)
อยากเจาะลึกการเอาฟังก์ชันมาวิ่งใส่แต่ละค่า ดูที่ apply
Pattern 8 : list comprehension
[x * 2 for x in nums]
แปลว่า อ่านว่า “เอาแต่ละตัว (x) ในกอง nums มาคูณ 2 แล้วเก็บผลลัพธ์เป็น list ใหม่” มันคือวิธีสร้าง list แบบย่อในบรรทัดเดียว เห็นรูปแบบ [... for ... in ...] เมื่อไหร่ให้รู้เลยว่ากำลังวนสร้างของใหม่จากของเดิม
เทียบ Excel ก็คือการลากสูตรลงทั้งคอลัมน์อีกนั่นแหละ ของเดิมอยู่คอลัมน์ A สูตร =A2*2 ลากลง ได้คอลัมน์ผลลัพธ์ใหม่ list comprehension ทำเรื่องเดียวกันแต่เขียนรวบในบรรทัดเดียว
ถ้าเจอแบบนี้บนข้อมูลตัวเลขเยอะๆ มักจับคู่กับ numpy array (ดู array)
Pattern 9 : f-string
f"ยอดรวม {total:,.0f} บาท"
แปลว่า เห็นตัว f นำหน้าเครื่องหมายคำพูดเมื่อไหร่ แปลว่าเป็นข้อความที่แทรกค่าตัวแปรเข้าไปได้ ตรง {total} คือเอาค่าจากตัวแปร total มาเสียบ ส่วน :,.0f คือจัดรูปแบบ ใส่ comma คั่นหลักพัน และไม่เอาทศนิยม ผลที่ได้เช่น ยอดรวม 1,250,000 บาท
เทียบ Excel เหมือนการต่อข้อความด้วย ="ยอด "&A1 หรือใช้ TEXT() จัดรูปแบบตัวเลข เช่น =TEXT(A1,"#,##0") ตรง :,.0f ก็คือบทบาทเดียวกับ format code ใน TEXT() นั่นแหละ
Pattern 10 : slicing (ตัดช่วง)
df[0:5]
arr[-1]
lst[::2]
แปลว่า slicing คือการตัดเอาช่วงข้อมูลด้วยเลขตำแหน่งในวงเล็บเหลี่ยม df[0:5] = เอา 5 แถวแรก (เริ่มนับจาก 0) · arr[-1] = เลขติดลบนับจากท้าย ดังนั้น -1 คือตัวสุดท้าย · lst[::2] = เว้นทีละตัว เอาตัวเว้นตัว
เทียบ Excel df[0:5] ก็เหมือนเลือกแถว 1-5 ดูข้อมูลตัวอย่าง · arr[-1] เหมือนกระโดดไปแถวล่างสุด (Ctrl+↓) เอาค่าสุดท้าย ระวังนิดเดียว: Python เริ่มนับที่ 0 ไม่ใช่ 1 และช่วง 0:5 จะได้ตำแหน่ง 0,1,2,3,4 (ไม่รวม 5)
อยากเจาะลึกการดึงแถวบนๆ มาดู หรือเลือกด้วยตำแหน่ง ดูที่ head และ iloc
Pattern 11 : dict / list literal (ก้อนข้อมูลดิบ)
{'name': ['A', 'B'], 'sales': [10, 20]}
แปลว่า ปีกกา { } ที่มีรูปแบบ 'ชื่อ': [ค่า] คือ dictionary หรือก้อนข้อมูลแบบ “ชื่อคอลัมน์ → รายการค่าในคอลัมน์นั้น” อันนี้บอกว่า คอลัมน์ name มีค่า A, B และคอลัมน์ sales มีค่า 10, 20 มักเจอตอน AI ป้อนข้อมูลดิบเข้าไปสร้างตาราง (DataFrame)
เทียบ Excel ก็คือการพิมพ์ตารางลงชีตเปล่าด้วยมือนั่นแหละ หัวคอลัมน์ name กับ sales แล้วใต้แต่ละหัวก็ใส่ค่าลงไป dict literal เขียนตารางเล็กๆ แบบนั้นด้วยตัวอักษร
อยากเห็นว่าก้อนนี้กลายเป็นตารางได้ยังไง ดูที่ dataframe
Pattern 12 : block (: + ย่อหน้า)
for row in data:
print(row)
if total > 1000:
print("ผ่านเกณฑ์")
แปลว่า เห็นบรรทัดที่ลงท้ายด้วยเครื่องหมาย : แล้วบรรทัดถัดไปย่อหน้าเข้าไป = “ของที่ย่อหน้าอยู่ข้างใน คือสิ่งที่จะทำซ้ำหรือทำตามเงื่อนไข” for ...: คือวนทำซ้ำทีละตัว · if ...: คือทำเฉพาะเมื่อเงื่อนไขจริง อันนี้แค่ดูออกว่า “อ๋อ มันกำลังวน/เช็คเงื่อนไขนะ” ก็พอแล้ว ไม่ต้องเขียนเองได้
เทียบ Excel for ก็เหมือนการลากสูตรลงทุกแถว (ทำซ้ำกับข้อมูลทีละตัว) ส่วน if ก็คือฟังก์ชัน IF() ที่เราใช้กันประจำ ทำอันนี้ถ้าเงื่อนไขจริง ความต่างคือ pandas ส่วนใหญ่ทำงานทั้งคอลัมน์รวดเดียว เลยเจอ for วนทีละแถวน้อยกว่าที่คิด ถ้าเจอก็แค่รู้ว่ามันกำลังวนอยู่
กลับมาเฉลย snippet เปิด : ทีละบรรทัด
ได้เวลาทำตามสัญญาแล้วครับ ผมเอาโค้ด 7 บรรทัดตอนเปิดบทความกลับมา แล้วแกะให้ดูทีละบรรทัดว่าแต่ละบรรทัดแปลว่าอะไร ตรงกับ pattern ไหนที่เพิ่งเรียนไป
import pandas as pd
df = pd.read_excel('sales.xlsx')
df = df[df['sales'] > 1000]
summary = df.groupby('city')['sales'].sum().reset_index()
summary['sales_with_vat'] = summary['sales'] * 1.07
summary.to_excel('summary.xlsx', index=False)
| บรรทัด | อ่านว่า | Pattern |
|---|---|---|
import pandas as pd | เรียกกล่องเครื่องมือ pandas เข้ามา ตั้งชื่อย่อว่า pd | Pattern 1 |
df = pd.read_excel('sales.xlsx') | เปิดไฟล์ sales.xlsx แล้วเก็บข้อมูลเป็นตารางชื่อ df | เครื่องมือ read (กฎข้อ ก.) |
df = df[df['sales'] > 1000] | กรองเอาเฉพาะแถวที่ sales เกิน 1000 (เหมือนกด Filter) | Pattern 3 |
df.groupby('city')['sales'].sum().reset_index() | จัดกลุ่มตาม city → รวม sales → จัดเป็นตาราง (เหมือน PivotTable) | Pattern 5 |
summary['sales_with_vat'] = summary['sales'] * 1.07 | เพิ่มคอลัมน์ใหม่ sales_with_vat = ยอดขาย × 1.07 (บวก VAT) | Pattern 4 |
summary.to_excel('summary.xlsx', index=False) | เซฟ summary กลับเป็นไฟล์ Excel ชื่อ summary.xlsx | เครื่องมือ write (กฎข้อ ก.) |
เห็นมั้ยครับ พอแกะออกมาทีละบรรทัด มันก็คือ flow งานที่เราทำใน Excel กันทุกวัน เปิดไฟล์ → กรอง → ทำ Pivot → เพิ่มคอลัมน์ VAT → เซฟ ตอนเปิดบทความผมสัญญาไว้ว่าจบแล้วคุณจะอ่าน 7 บรรทัดนี้ออก ตอนนี้คุณอ่านออกแล้วครับ 😎
Cheat Sheet : เห็น X = แปลว่า Y
เซฟตารางนี้ไว้เปิดเวลาเจอโค้ดที่อ่านไม่ออก กวาดตาหาสัญลักษณ์ที่เห็น แล้วดูว่ามันแปลว่าอะไร
| เห็นสัญลักษณ์ / โค้ด | แปลว่า | เทียบ Excel |
|---|---|---|
import pandas as pd | เรียกกล่องเครื่องมือ ตั้งชื่อย่อ | เปิด Power Query/Pivot ก่อนใช้ |
df['sales'] / df[['a','b']] | หยิบ 1 คอลัมน์ / หลายคอลัมน์ | เลือก column |
df[df['sales'] > 1000] | กรองแถวตามเงื่อนไข | Filter |
df['tax'] = df['sales'] * 0.07 | สร้าง/แก้คอลัมน์จากสูตร | เขียนสูตรคอลัมน์ว่างแล้วลากลง |
.groupby(...).sum().reset_index() | สายพาน: จัดกลุ่ม→รวม→จัดตาราง | PivotTable |
(A) & (B) · | · ~ · .isin([...]) | AND/OR/NOT ต้องมีวงเล็บคร่อมทุกเงื่อนไข! | AND() / OR() + Filter หลายค่า |
.apply(lambda x: x*1.07) | เอาทุกค่าไปผ่านสูตรสั้นๆ | ลากสูตรลงทั้งคอลัมน์ |
[x*2 for x in nums] | สร้าง list ใหม่จากของเดิม | ลากสูตรลงทั้งคอลัมน์ |
f"ยอด {total:,.0f}" | แทรกค่าตัวแปรลงข้อความ | ="ยอด "&A1 / TEXT() |
df[0:5] / arr[-1] / lst[::2] | ตัดช่วง: 5 ตัวแรก / ตัวสุดท้าย / เว้นตัว | เลือกช่วงแถว / ค่าสุดท้าย |
{'name':['A'], 'sales':[10]} | ก้อนข้อมูลดิบ (คอลัมน์→ค่า) | พิมพ์ตารางลงชีตด้วยมือ |
for ...: / if ...: + ย่อหน้า | ทำซ้ำ / ทำตามเงื่อนไข | ลากสูตรลง / IF() |
ปิดท้าย : สะพานไปดูแต่ละตัวลึกๆ
12 จุดนี้คือ “กาว” ที่เชื่อมทุก method เข้าด้วยกันครับ พอจับ pattern พวกนี้ได้ โค้ด AI ส่วนใหญ่จะอ่านออกทันที เพราะมันก็วนเวียนอยู่กับ 12 จุดนี้ผสมกันไปมานี่แหละ ที่เหลือก็แค่ชื่อ method ที่เปลี่ยนไปตามงาน
แต่ละ method ที่ผมพาดผ่านในบทความนี้ groupby, merge (รวมตารางแบบ VLOOKUP), pivot_table, apply ฯลฯ แต่ละตัวมีรายละเอียดของมัน ถ้าอยากเจาะลึกว่าตัวไหนใช้ยังไง รับ argument อะไรบ้าง ผมรวบรวมไว้ในหน้า Python Function Explainer แล้ว เข้าไปดูได้ที่ คลังฟังก์ชัน Python
แล้วคุณล่ะครับ เคยเจอโค้ด Python ที่ AI เขียนมาให้แล้วอ่านไม่ออกตรงไหนบ้าง? พิมพ์โค้ดที่งงมา comment ไว้ได้เลย เดี๋ยวมาช่วยกันแกะครับ



