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)

ความนิยม5/10
ความยาก3/10
ประโยชน์5/10

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าstr

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

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

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

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 เอง 😎

Examples

ตัวอย่างที่ 1: แปลง DataFrame เป็น string CSV (ไม่มี index)df.to_csv(index=False)

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

>_
df.to_csv(index=False)

ผลลัพธ์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 นำเข้าฐานข้อมูล

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

ผลลัพธ์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 แต่ทำในโค้ดได้สะดวกกว่า

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

ผลลัพธ์name,score
Alice,90
Bob,75
Charlie,88
ตัวอย่างที่ 4: แสดงผล CSV พร้อม index (default)df.to_csv()

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

>_
df.to_csv()

ผลลัพธ์,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

ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas to_csv จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้pandas to_csvIO
IO (2)
pandas read_csv

read_csv ใน pandas ผมใช้สำหรับโหลดข้อมูลจากไฟล์ CSV หรือ text ที่มีตัวคั่นเข้ามาเป็น DataFrame พร้อมใช้งาน ถ้าใครเคยเปิดไฟล์ CSV ใน Excel แล้วได้ตารางให้แก้งานต่อ read_csv ก็คือสิ่งเดียวกันเลยครับแต่สำหรับ Python

pandas read_excel

read_excel ใน pandas ผมใช้สำหรับโหลดข้อมูลจากไฟล์ .xlsx หรือ .xls เข้ามาเป็น DataFrame เพื่อวิเคราะห์ต่อใน Python ถ้าเคยเปิดไฟล์ Excel แล้วก็อปข้อมูลไปทำงานต่อ ตัวนี้ทำแบบเดียวกันแต่อัตโนมัติเลยครับ

Creation (1)
pd.DataFrame

pd.DataFrame คือคำสั่งสร้างตาราง 2 มิติ (แถว × คอลัมน์) ใน pandas ซึ่งผมเทียบได้กับ sheet หรือ range ใน Excel เลยครับ โค้ด Python ที่วิเคราะห์ข้อมูลแทบทุกตัวเริ่มต้นด้วยการสร้าง DataFrame นี่แหละ

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่