---
title: pandas to_csv — ส่งออก DataFrame เป็น CSV
url: https://www.thepexcel.com/functions/python/io/pandas-to-csv/
type: function-explainer
program: Python
syntax: "df.to_csv(path_or_buf, sep, index, columns)"
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

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

> to_csv ใน pandas ผมใช้สำหรับส่งออกข้อมูลใน DataFrame ให้เป็น CSV ไม่ว่าจะเซฟเป็นไฟล์หรือแปลงเป็น str

## คำอธิบาย

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

## Syntax

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

## Arguments

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

## ตัวอย่าง

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

```excel
df.to_csv(index=False)
```

**ผลลัพธ์:** `name,score
Alice,90
Bob,75
Charlie,88
`

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

### 2. ตัวอย่างที่ 2: แปลงเป็น CSV โดยใช้ tab เป็นตัวคั่น

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

**ผลลัพธ์:** `product	price
Apple	30
Banana	15
Orange	25
`

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

### 3. ตัวอย่างที่ 3: เลือกส่งออกเฉพาะบางคอลัมน์

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

**ผลลัพธ์:** `name,score
Alice,90
Bob,75
Charlie,88
`

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

### 4. ตัวอย่างที่ 4: แสดงผล CSV พร้อม index (default)

```excel
df.to_csv()
```

**ผลลัพธ์:** `,city,pop
0,Bangkok,10000000
1,Chiang Mai,1000000
`

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

## หมายเหตุเพิ่มเติม

- 💡 ผมแนะนำให้ใช้ index=False เป็น default เสมอครับ เพราะส่วนใหญ่เลข row index ไม่ได้มีความหมายกับคนที่รับไฟล์ไป ถ้าใส่ไปจะมีคอลัมน์แรกเป็นตัวเลขที่งงๆ ค่อยใส่ index=True เมื่อ index นั้นมีข้อมูลสำคัญจริงๆ

- ถ้าใส่ path เข้าไป เช่น df.to_csv('result.csv') ฟังก์ชันจะเซฟไฟล์ลงดิสก์และคืน None กลับมา ไม่ใช่ string ครับ ผมพลาดจุดนี้บ่อยมากตอนแรก คือ print(df.to_csv('file.csv')) แล้วได้ None ออกมา จริงๆ ต้องใช้ path กับ no-return แยกกันครับ

## คำถามที่พบบ่อย

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

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

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

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

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

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

## แหล่งข้อมูลเพิ่มเติม

- [pandas DataFrame.to_csv (official docs)](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_csv.html) _(article)_

---

_Source: [https://www.thepexcel.com/functions/python/io/pandas-to-csv/](https://www.thepexcel.com/functions/python/io/pandas-to-csv/)_
