to_csv ใน pandas ผมใช้สำหรับส่งออกข้อมูลใน DataFrame ให้เป็น CSV ไม่ว่าจะเซฟเป็นไฟล์หรือแปลงเป็น string ก็ทำได้ครับ เหมือนกับการกด Save As → CSV ใน Excel แต่ทำผ่านโค้ดได้เลย
df.to_csv(path_or_buf, sep, index, columns)
df.to_csv(path_or_buf, sep, index, columns)
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 | ระบุชื่อคอลัมน์ที่ต้องการส่งออก ถ้าไม่ใส่จะส่งออกทุกคอลัมน์ ใช้เมื่ออยากเลือกเฉพาะบางคอลัมน์ |
df.to_csv(index=False)df.to_csv(index=False)
name,score
Alice,90
Bob,75
Charlie,88
df.to_csv(sep='\t', index=False)df.to_csv(sep='\t', index=False)
product price
Apple 30
Banana 15
Orange 25
df.to_csv(columns=['name', 'score'], index=False)df.to_csv(columns=['name', 'score'], index=False)
name,score
Alice,90
Bob,75
Charlie,88
df.to_csv()df.to_csv()
,city,pop
0,Bangkok,10000000
1,Chiang Mai,1000000
เพราะตอนที่ใส่ path เข้าไป to_csv() จะเซฟข้อมูลลงไฟล์บนดิสก์และคืน None กลับมาครับ ไม่มีอะไรให้ print ต้องไปเปิดไฟล์นั้นดูเอง ถ้าอยากเห็นในโค้ดต้องเรียกแบบไม่ใส่ path เช่น df.to_csv(index=False) แทน เหมือนกันกับ to_excel() ถ้าใส่ path จะเซฟไฟล์เลยและคืน None เช่นกันครับ
to_excel() เซฟเป็นไฟล์ .xlsx ที่รองรับ multi-sheet, formatting, formula ได้ครับ ส่วน to_csv() เป็น plain text ไม่มี formatting แต่ universal กว่า — ทุก tool อ่านได้ ไฟล์เล็กกว่า และเปิดในโปรแกรมอื่นง่ายกว่า ผมเลือก CSV ตอนแชร์ข้ามระบบ และเลือก Excel ตอนส่งให้คนทำงานต่อใน Excel โดยตรงครับ
ผมระบุ encoding=’utf-8-sig’ ครับ เช่น df.to_csv(‘output.csv’, encoding=’utf-8-sig’, index=False) ตัว -sig จะเพิ่ม BOM ให้ Excel เปิดแล้วภาษาไทยแสดงผลถูกต้องเลย ถ้าใช้ utf-8 ธรรมดาบาง version ของ Excel จะอ่านภาษาไทยผิดครับ
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 เอง 😎