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 | ระบุชื่อคอลัมน์ที่ต้องการส่งออก ถ้าไม่ใส่จะส่งออกทุกคอลัมน์ ใช้เมื่ออยากเลือกเฉพาะบางคอลัมน์ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
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 เอง 😎
ผมเรียก to_csv() โดยไม่ใส่ path และกำหนด index=False ครับ ผลที่ได้คือ string CSV ที่มี header และข้อมูลทุกแถว โดยไม่มีเลข 0,1,2 ติดมาด้วย ใช้ดูหรือนำไปประมวลผลต่อในโค้ดได้เลย
ใส่ sep='\t' เพื่อเปลี่ยนตัวคั่นจาก comma เป็น tab ครับ ไฟล์แบบนี้เรียกว่า TSV (Tab-Separated Values) บางระบบหรือบาง tool รับแบบนี้แทน CSV ผมเจอบ่อยตอน export ไปให้แผนก IT นำเข้าฐานข้อมูล
ผมใช้ columns=['name', 'score'] เพื่อส่งออกเฉพาะ 2 คอลัมน์นั้นครับ คอลัมน์ id กับ grade ถูกตัดออก เหมือนกับตอนที่เราซ่อนคอลัมน์ใน Excel แล้วค่อย Save As เป็น CSV แต่ทำในโค้ดได้สะดวกกว่า
เรียก to_csv() แบบไม่ใส่ argument เลยครับ ค่า default คือ index=True ดังนั้นจะเห็นเลข 0,1 นำหน้าแต่ละแถวด้วย บางทีผมก็ใช้แบบนี้เพื่อดูว่าข้อมูลหน้าตาเป็นยังไงก่อนเซฟจริง
เพราะตอนที่ใส่ 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 จะอ่านภาษาไทยผิดครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas to_csv จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
read_csv ใน pandas ผมใช้สำหรับโหลดข้อมูลจากไฟล์ CSV หรือ text ที่มีตัวคั่นเข้ามาเป็น DataFrame พร้อมใช้งาน ถ้าใครเคยเปิดไฟล์ CSV ใน Excel แล้วได้ตารางให้แก้งานต่อ read_csv ก็คือสิ่งเดียวกันเลยครับแต่สำหรับ Python
read_excel ใน pandas ผมใช้สำหรับโหลดข้อมูลจากไฟล์ .xlsx หรือ .xls เข้ามาเป็น DataFrame เพื่อวิเคราะห์ต่อใน Python ถ้าเคยเปิดไฟล์ Excel แล้วก็อปข้อมูลไปทำงานต่อ ตัวนี้ทำแบบเดียวกันแต่อัตโนมัติเลยครับ
pd.DataFrame คือคำสั่งสร้างตาราง 2 มิติ (แถว × คอลัมน์) ใน pandas ซึ่งผมเทียบได้กับ sheet หรือ range ใน Excel เลยครับ โค้ด Python ที่วิเคราะห์ข้อมูลแทบทุกตัวเริ่มต้นด้วยการสร้าง DataFrame นี่แหละ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่