Thep Excel

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

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

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

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

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

คืนค่า (Returns)
DataFrame

คืนเป็น DataFrame ที่พร้อมใช้งานทันทีครับ ต่อด้วย method ต่างๆ ได้เลย เช่น .head(), .describe(), .groupby() ฯลฯ

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

Examples

ตัวอย่างที่ 1: โหลด CSV พื้นฐาน
pd.read_csv(StringIO(csv_text))
ผมโหลด CSV จาก StringIO แทนไฟล์จริงครับ ได้ DataFrame 2 แถว 2 คอลัมน์ทันที ใช้ StringIO แบบนี้ตอนเทสโค้ดได้เลยโดยไม่ต้องมีไฟล์บนเครื่อง เหมือนกับที่เราเปิดไฟล์ CSV ใน Excel แล้วได้ตาราง พร้อมทำงานต่อได้เลยครับ
Python Code:

pd.read_csv(StringIO(csv_text))

Result:

name age
0 Ann 30
1 Bob 25

ตัวอย่างที่ 2: เลือกโหลดแค่บางคอลัมน์ด้วย usecols
pd.read_csv(StringIO(csv_text), usecols=['name', 'salary'])
ผมใช้ usecols บอกว่าอยากได้แค่คอลัมน์ name กับ salary เท่านั้น คอลัมน์ age ถูกข้ามไปเลยครับ เหมือนกับที่เราเลือก Column ใน Power Query ว่าอันไหนจะเอาอันไหนจะตัดทิ้ง ไฟล์ใหญ่โหลดแค่ที่ต้องการ ประหยัด RAM และเร็วกว่าโหลดทั้งหมดแล้วค่อยเลือกทีหลังครับ
Python Code:

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

Result:

name salary
0 Ann 50000
1 Bob 45000
2 Cara 55000

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

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

Result:

name age
0 Ann 30
1 Bob 25
2 Cara 28

ตัวอย่างที่ 4: กำหนด type คอลัมน์ด้วย dtype
pd.read_csv(StringIO(csv_text), dtype={'code': str, 'amount': int})
ผมใช้ dtype บอก pandas ตั้งแต่แรกเลยว่า code ต้องเป็น string (ไม่ใช่ตัวเลข) และ amount เป็น int ครับ ถ้าไม่ระบุ pandas อาจแปลง '001' เป็น 1 ทำให้ zero นำหน้าหายไป ซึ่งพังแน่ถ้าเป็นรหัสสินค้าหรือรหัสไปรษณีย์ กำหนด dtype ตั้งแต่ต้นป้องกัน bug แบบนี้ได้ดีครับ
Python Code:

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

Result:

code amount
0 001 100
1 002 200
2 003 300

FAQs

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

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

ไฟล์ 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 ให้ด้วย

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

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

Resources & Related

Additional Notes

read_csv คือจุดเริ่มต้นของงาน data analysis ส่วนใหญ่ที่ผมทำครับ มันอ่านไฟล์ CSV (หรือข้อความที่คั่นด้วยอักขระใดก็ได้) แล้วแปลงให้เป็น DataFrame ที่พร้อมวิเคราะห์ต่อได้ทันที ไม่ต้องเขียน parser เองให้ยุ่งยาก

จุดที่ทำให้ read_csv ทรงพลังคือ argument ที่ปรับได้เยอะมากครับ ตั้งแต่บอกว่าตัวคั่นคืออะไร (sep), โหลดแค่บางคอลัมน์ (usecols), จำกัดจำนวนแถว (nrows), กำหนด type ของแต่ละคอลัมน์ (dtype), ไปจนถึงบอกว่าค่าไหนหมายถึง null ครับ

ที่เจ๋งคือ read_csv รับได้ทั้ง path ไฟล์จริง, URL, และ file-like object เช่น StringIO ทำให้ผมเทสโค้ดได้โดยไม่ต้องมีไฟล์จริงบนเครื่องเลย ✨

ส่วนตัวผมชอบใช้ usecols กับ dtype ตั้งแต่ตอน read เลยครับ ไฟล์ใหญ่ๆ โหลดแค่คอลัมน์ที่ต้องการกับกำหนด type ให้ถูกต้องตั้งแต่แรก เร็วและประหยัด RAM กว่าโหลดทุกคอลัมน์แล้วค่อยจัดทีหลังเยอะมาก 😎

Leave a Reply

Your email address will not be published. Required fields are marked *