---
title: pandas read_csv — โหลดไฟล์ CSV เข้า DataFrame
url: https://www.thepexcel.com/functions/python/io/pandas-read-csv/
type: function-explainer
program: Python
syntax: "pd.read_csv(filepath_or_buffer, sep, usecols, nrows, dtype)"
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

# pandas read_csv — โหลดไฟล์ CSV เข้า DataFrame

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

## คำอธิบาย

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

## Syntax

```excel
pd.read_csv(filepath_or_buffer, sep, usecols, nrows, dtype)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| filepath_or_buffer | Yes | str \| Path \| file-like |  | path ของไฟล์ CSV, URL, หรือ file-like object เช่น StringIO ก็ได้ครับ |
| sep | No | str | ',' | ตัวคั่นระหว่างคอลัมน์ ค่าเริ่มต้นคือ comma (,) แต่ถ้าไฟล์คั่นด้วย tab ให้ใส่ sep='\t' ครับ |
| usecols | No | list \| callable | None | ระบุชื่อหรือ index คอลัมน์ที่อยากโหลด เช่น ['name', 'age'] ไม่โหลดทุกคอลัมน์ให้สิ้นเปลือง RAM |
| nrows | No | int | None | จำกัดจำนวนแถวที่โหลด เช่น nrows=100 เอาแค่ 100 แถวแรก ใช้ตอน preview ไฟล์ใหญ่ก่อนโหลดจริงครับ |
| dtype | No | dict \| str | None | กำหนด type ของคอลัมน์เลย เช่น {'age': int, 'code': str} ป้องกัน pandas เดา type ผิด |
| header | No | int \| list \| None | 'infer' | บอกว่าแถวไหนเป็น header ค่าเริ่มต้นคือแถว 0 ถ้าไม่มี header ให้ใส่ header=None ครับ |
| index_col | No | int \| str \| list \| False | None | คอลัมน์ที่ใช้เป็น index ของ DataFrame เช่น index_col='id' หรือ index_col=0 |

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: โหลด CSV พื้นฐาน

```excel
pd.read_csv(StringIO(csv_text))
```

**ผลลัพธ์:** `  name  age
0  Ann   30
1  Bob   25`

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

### 2. ตัวอย่างที่ 2: เลือกโหลดแค่บางคอลัมน์ด้วย usecols

```excel
pd.read_csv(StringIO(csv_text), usecols=['name', 'salary'])
```

**ผลลัพธ์:** `   name  salary
0   Ann   50000
1   Bob   45000
2  Cara   55000`

ผมใช้ usecols บอกว่าอยากได้แค่คอลัมน์ name กับ salary เท่านั้น คอลัมน์ age ถูกข้ามไปเลยครับ เหมือนกับที่เราเลือก Column ใน Power Query ว่าอันไหนจะเอาอันไหนจะตัดทิ้ง ไฟล์ใหญ่โหลดแค่ที่ต้องการ ประหยัด RAM และเร็วกว่าโหลดทั้งหมดแล้วค่อยเลือกทีหลังครับ

### 3. ตัวอย่างที่ 3: จำกัดจำนวนแถวด้วย nrows

```excel
pd.read_csv(StringIO(csv_text), nrows=3)
```

**ผลลัพธ์:** `   name  age
0   Ann   30
1   Bob   25
2  Cara   28`

ใส่ nrows=3 เพื่อโหลดแค่ 3 แถวแรกครับ ผมใช้ trick นี้บ่อยมากตอนไฟล์ CSV มีล้านแถว แต่อยากลอง preview structure ก่อนว่าข้อมูลหน้าตาเป็นยังไง โหลดแค่นิดเดียวก็รู้แล้วว่าต้องทำอะไรต่อ ประหยัดเวลารอโหลดทั้งไฟล์มากๆ

### 4. ตัวอย่างที่ 4: กำหนด type คอลัมน์ด้วย dtype

```excel
pd.read_csv(StringIO(csv_text), dtype={'code': str, 'amount': int})
```

**ผลลัพธ์:** `  code  amount
0  001     100
1  002     200
2  003     300`

ผมใช้ dtype บอก pandas ตั้งแต่แรกเลยว่า code ต้องเป็น string (ไม่ใช่ตัวเลข) และ amount เป็น int ครับ ถ้าไม่ระบุ pandas อาจแปลง '001' เป็น 1 ทำให้ zero นำหน้าหายไป ซึ่งพังแน่ถ้าเป็นรหัสสินค้าหรือรหัสไปรษณีย์ กำหนด dtype ตั้งแต่ต้นป้องกัน bug แบบนี้ได้ดีครับ

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

- 💡 ผมแนะนำให้ระบุ dtype ทุกครั้งที่รู้ type ล่วงหน้าครับ โดยเฉพาะคอลัมน์ที่เป็น ID หรือรหัสที่มี 0 นำหน้า เช่น dtype={'zip_code': str} ป้องกัน pandas แปลง '00100' เป็น 100 โดยไม่ตั้งใจ

- ถ้าอยากดูก่อนว่า CSV มีหน้าตายังไง ใช้ nrows=5 โหลดแค่ 5 แถวแรกดูก่อนครับ เร็วมากและไม่เปลือง RAM เสร็จแล้วค่อยโหลดเต็มอีกทีพร้อมระบุ options ที่เหมาะสม

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

**Q: ต่างจากการเปิดไฟล์ด้วย open() ธรรมดายังไงครับ?**

ต่างกันมากเลยครับ ถ้าใช้ open() เราได้แค่ raw text ต้องเขียน code แปลงเองทุกอย่าง ตั้งแต่แยกแถว แยกคอลัมน์ แปลง type ฯลฯ แต่ read_csv ทำทุกอย่างให้เลย ได้ DataFrame พร้อมใช้ทันที ผมไม่เคย parse CSV ด้วย open() เองอีกแล้วตั้งแต่รู้จัก pandas ครับ

**Q: ไฟล์ CSV ภาษาไทย encoding ผิด อ่านแล้วเป็น ??? ทำยังไงดี?**

ระบุ encoding='utf-8' หรือ encoding='cp874' (Thai Windows) ครับ เช่น pd.read_csv('file.csv', encoding='cp874') ไฟล์ที่ export จาก Excel หรือระบบไทยเก่าๆ มักเป็น cp874 (TIS-620) ส่วนไฟล์สมัยใหม่หรือ export จาก Google Sheets มักเป็น UTF-8 ลองสลับดูครับ ถ้าไม่แน่ใจลอง 'utf-8-sig' ก็ได้ครับ มันจัดการ BOM header ของ Windows ให้ด้วย

**Q: โหลดไฟล์ใหญ่มากๆ หลาย GB RAM ไม่พอทำยังไง?**

ใช้ chunksize ครับ เช่น pd.read_csv('big.csv', chunksize=10000) แล้วประมวลผลทีละ chunk ผมใช้แบบนี้ตอนไฟล์ใหญ่เกิน RAM ได้เลย อีกวิธีคือใช้ usecols โหลดแค่คอลัมน์ที่ต้องการกับ dtype ให้ถูกต้องตั้งแต่แรก ก็ช่วยลด RAM ไปได้เยอะครับ

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

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

---

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