Thep Excel

pandas to_csv — ส่งออก DataFrame เป็น CSV

to_csv ใน pandas ผมใช้สำหรับส่งออกข้อมูลใน DataFrame ให้เป็น CSV ไม่ว่าจะเซฟเป็นไฟล์หรือแปลงเป็น string ก็ทำได้ครับ เหมือนกับการกด Save As → CSV ใน Excel แต่ทำผ่านโค้ดได้เลย

df.to_csv(path_or_buf, sep, index, columns)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

df.to_csv(path_or_buf, sep, index, columns)

คืนค่า (Returns)
str

เมื่อไม่ใส่ path (path_or_buf=None) จะคืน string CSV กลับมาในโค้ดครับ แต่ถ้าใส่ path จะเซฟไฟล์แล้วคืน None แทน — ผลลัพธ์ที่ได้ขึ้นอยู่กับว่าใส่ path หรือเปล่า

Argument Type Required Default Description
path_or_buf str | None Optional None path ของไฟล์ที่จะเซฟ เช่น ‘output.csv’ หรือ ‘data/result.csv’ ถ้าไม่ใส่ (None) ผลลัพธ์จะเป็น string CSV ส่งคืนมาในโค้ดแทน
sep str Optional ',' ตัวคั่นระหว่างคอลัมน์ ค่าเริ่มต้นคือ comma (,) แต่เปลี่ยนเป็น tab (‘\t’) หรือ pipe (‘|’) ก็ได้ครับ
index bool Optional True ใส่ True เพื่อเขียน index (เลขแถว) ลงไปใน CSV ด้วย หรือ False เพื่อข้าม ผมมักใช้ index=False เพราะส่วนใหญ่ไม่ต้องการเลข row ติดไปในไฟล์
columns list | None Optional None ระบุชื่อคอลัมน์ที่ต้องการส่งออก ถ้าไม่ใส่จะส่งออกทุกคอลัมน์ ใช้เมื่ออยากเลือกเฉพาะบางคอลัมน์

Examples

ตัวอย่างที่ 1: แปลง DataFrame เป็น string CSV (ไม่มี index)
df.to_csv(index=False)
ผมเรียก to_csv() โดยไม่ใส่ path และกำหนด index=False ครับ ผลที่ได้คือ string CSV ที่มี header และข้อมูลทุกแถว โดยไม่มีเลข 0,1,2 ติดมาด้วย ใช้ดูหรือนำไปประมวลผลต่อในโค้ดได้เลย
Python Code:

df.to_csv(index=False)

Result:

name,score
Alice,90
Bob,75
Charlie,88

ตัวอย่างที่ 2: แปลงเป็น CSV โดยใช้ tab เป็นตัวคั่น
df.to_csv(sep='\t', index=False)
ใส่ sep='\t' เพื่อเปลี่ยนตัวคั่นจาก comma เป็น tab ครับ ไฟล์แบบนี้เรียกว่า TSV (Tab-Separated Values) บางระบบหรือบาง tool รับแบบนี้แทน CSV ผมเจอบ่อยตอน export ไปให้แผนก IT นำเข้าฐานข้อมูล
Python Code:

df.to_csv(sep='\t', index=False)

Result:

product price
Apple 30
Banana 15
Orange 25

ตัวอย่างที่ 3: เลือกส่งออกเฉพาะบางคอลัมน์
df.to_csv(columns=['name', 'score'], index=False)
ผมใช้ columns=['name', 'score'] เพื่อส่งออกเฉพาะ 2 คอลัมน์นั้นครับ คอลัมน์ id กับ grade ถูกตัดออก เหมือนกับตอนที่เราซ่อนคอลัมน์ใน Excel แล้วค่อย Save As เป็น CSV แต่ทำในโค้ดได้สะดวกกว่า
Python Code:

df.to_csv(columns=['name', 'score'], index=False)

Result:

name,score
Alice,90
Bob,75
Charlie,88

ตัวอย่างที่ 4: แสดงผล CSV พร้อม index (default)
df.to_csv()
เรียก to_csv() แบบไม่ใส่ argument เลยครับ ค่า default คือ index=True ดังนั้นจะเห็นเลข 0,1 นำหน้าแต่ละแถวด้วย บางทีผมก็ใช้แบบนี้เพื่อดูว่าข้อมูลหน้าตาเป็นยังไงก่อนเซฟจริง
Python Code:

df.to_csv()

Result:

,city,pop
0,Bangkok,10000000
1,Chiang Mai,1000000

FAQs

ทำไมเรียก df.to_csv('file.csv') แล้วโค้ดไม่ print อะไรออกมาเลย?

เพราะตอนที่ใส่ path เข้าไป to_csv() จะเซฟข้อมูลลงไฟล์บนดิสก์และคืน None กลับมาครับ ไม่มีอะไรให้ print ต้องไปเปิดไฟล์นั้นดูเอง ถ้าอยากเห็นในโค้ดต้องเรียกแบบไม่ใส่ path เช่น df.to_csv(index=False) แทน เหมือนกันกับ to_excel() ถ้าใส่ path จะเซฟไฟล์เลยและคืน None เช่นกันครับ

ต่างจาก df.to_excel() ยังไง?

to_excel() เซฟเป็นไฟล์ .xlsx ที่รองรับ multi-sheet, formatting, formula ได้ครับ ส่วน to_csv() เป็น plain text ไม่มี formatting แต่ universal กว่า — ทุก tool อ่านได้ ไฟล์เล็กกว่า และเปิดในโปรแกรมอื่นง่ายกว่า ผมเลือก CSV ตอนแชร์ข้ามระบบ และเลือก Excel ตอนส่งให้คนทำงานต่อใน Excel โดยตรงครับ

จะ encode ภาษาไทยใน CSV ยังไงไม่ให้เป็นอักขระแปลกๆ?

ผมระบุ encoding=’utf-8-sig’ ครับ เช่น df.to_csv(‘output.csv’, encoding=’utf-8-sig’, index=False) ตัว -sig จะเพิ่ม BOM ให้ Excel เปิดแล้วภาษาไทยแสดงผลถูกต้องเลย ถ้าใช้ utf-8 ธรรมดาบาง version ของ Excel จะอ่านภาษาไทยผิดครับ

Resources & Related

Additional Notes

to_csv เป็น method ที่ผมใช้บ่อยมากตอนต้องส่งออกข้อมูลหลังประมวลผลเสร็จแล้วครับ หลักการง่ายมาก — เรียก df.to_csv() แล้วกำหนดว่าจะส่งออกไปที่ไหน ถ้าไม่ใส่ path ก็ได้ string CSV กลับมาในโค้ด ถ้าใส่ path ก็เซฟเป็นไฟล์บนดิสก์เลย

ที่เจ๋งคือ to_csv ปรับแต่งได้ยืดหยุ่นมาก ทั้งตัวคั่น (comma, tab, pipe ก็ได้หมด), encoding, header, จะเขียน index หรือไม่ก็กำหนดได้ครับ parameter ที่ผมใช้บ่อยที่สุดคือ index=False เพราะส่วนใหญ่ไม่อยากให้เลข row index ติดไปในไฟล์ด้วย

ส่วนตัวผมมองว่า to_csv คือ “ประตูออก” ของ pandas — ทำงานกับข้อมูลเสร็จแล้ว ก็ส่งออกได้ผ่านตัวนี้เลยครับ ไม่ต้องเปิด Excel มา copy-paste เอง 😎

Leave a Reply

Your email address will not be published. Required fields are marked *