Thep Excel

pandas read_excel — อ่านไฟล์ Excel เข้า pandas DataFrame

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

pd.read_excel(io, sheet_name, usecols, header)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

pd.read_excel(io, sheet_name, usecols, header)

คืนค่า (Returns)
DataFrame

คืนเป็น DataFrame ที่พร้อมใช้งานทันทีครับ — ยกเว้นกรณี sheet_name=None ซึ่งจะคืนเป็น dict ของ DataFrame แทน ในกรณีปกติ (อ่าน sheet เดียว) เอาไปต่อด้วย .head(), .info(), .groupby() ได้เลย

Argument Type Required Default Description
io str | Path | BytesIO Yes path ของไฟล์ Excel หรือ object ที่อ่านได้ เช่น ‘data.xlsx’, Path(‘data.xlsx’), หรือ BytesIO buffer
sheet_name str | int | list | None Optional 0 ชื่อหรือ index ของ sheet ที่จะอ่าน ค่า default คือ 0 (sheet แรก) ถ้าใส่ None จะอ่านทุก sheet และคืน dict
usecols str | list | callable | None Optional None เลือกเฉพาะบางคอลัมน์ เช่น ‘A:C’ สำหรับ Excel column letter, [‘name’,’age’] สำหรับชื่อคอลัมน์, หรือ None เพื่ออ่านทุกคอลัมน์
header int | list | None Optional 0 แถวที่ใช้เป็น header (ชื่อคอลัมน์) ค่า default คือ 0 (แถวแรก) ถ้าใส่ None จะไม่มี header และคอลัมน์จะเป็นตัวเลข 0, 1, 2…

Examples

ตัวอย่างที่ 1: อ่านไฟล์ Excel พื้นฐาน
pd.read_excel(buf)
ผมอ่านไฟล์ Excel เข้ามาเป็น DataFrame ด้วยคำสั่งเดียวครับ แถวแรกของ Excel จะกลายเป็นชื่อคอลัมน์อัตโนมัติ ในงานจริงแค่แทน buf ด้วย path ไฟล์ เช่น pd.read_excel('sales_2024.xlsx') ก็ใช้งานได้เลย
Python Code:

pd.read_excel(buf)

Result:

name age
0 Ann 30
1 Bob 25

ตัวอย่างที่ 2: เลือก sheet และคอลัมน์ที่ต้องการ
pd.read_excel(buf, sheet_name='employees', usecols=['name', 'age'])
ผมระบุชื่อ sheet ว่า 'employees' และเลือกเฉพาะคอลัมน์ name กับ age มาเท่านั้นครับ ถ้าไฟล์มีหลาย sheet วิธีนี้สะดวกมาก ไม่ต้องโหลดข้อมูลทั้งหมดให้หนักโดยไม่จำเป็น
Python Code:

pd.read_excel(buf, sheet_name='employees', usecols=['name', 'age'])

Result:

name age
0 Ann 30
1 Bob 25

ตัวอย่างที่ 3: อ่านโดยไม่มี header (ข้อมูลดิบไม่มีชื่อคอลัมน์)
pd.read_excel(buf, header=None)
บางครั้งผมเจอไฟล์ Excel ที่แถวแรกไม่ใช่ชื่อคอลัมน์ แต่เป็นข้อมูลจริงๆ เลยครับ ใส่ header=None ไว้ pandas จะตั้งชื่อคอลัมน์เป็นตัวเลข 0, 1, 2… แทน แล้วค่อยเปลี่ยนชื่อทีหลังด้วย df.columns = ['name', 'age'] ได้
Python Code:

pd.read_excel(buf, header=None)

Result:

0 1
0 Ann 30
1 Bob 25

ตัวอย่างที่ 4: อ่านทุก sheet พร้อมกันได้ dict
pd.read_excel(buf, sheet_name=None)
ใส่ sheet_name=None แล้วจะได้ dict กลับมา key คือชื่อ sheet value คือ DataFrame ของแต่ละ sheet ครับ ผมใช้วิธีนี้ตอนไฟล์มีข้อมูลแยกรายเดือนไว้ใน sheet ต่างๆ แล้วอยากรวมทุก sheet เข้าด้วยกัน
Python Code:

pd.read_excel(buf, sheet_name=None)

Result:

{'Jan': name age
0 Ann 30, 'Feb': name age
0 Bob 25}

FAQs

ต้องติดตั้งอะไรเพิ่มเติมไหมก่อนใช้ read_excel?

ต้องติดตั้ง openpyxl ด้วยครับ เพราะ pandas ใช้มันเป็น engine อ่านไฟล์ .xlsx ถ้าไม่มีจะขึ้น error ว่า ‘Missing optional dependency openpyxl’ ติดตั้งด้วย pip install openpyxl แค่ครั้งเดียวก็ใช้ได้เลย ส่วนไฟล์ .xls เก่าๆ ต้องใช้ engine=’xlrd’ แทนครับ

ถ้าอยากส่งออกผลลัพธ์กลับเป็นไฟล์ Excel ต้องทำยังไง?

ใช้ df.to_excel(‘output.xlsx’, index=False) ครับ มันคือคู่หูของ read_excel เลย — อ่านเข้ามาด้วย read_excel แปรรูปข้อมูล แล้วบันทึกออกด้วย to_excel ผมใช้สองตัวนี้คู่กันตลอดเลยตอนทำ Excel automation

อ่านไฟล์ที่มีหลาย header (merged cells บน 2 แถว) ได้ไหม?

ได้ครับ ใส่ header=[0,1] เพื่อบอกให้ pandas ใช้แถว 0 และ 1 เป็น header ร่วมกัน ผลลัพธ์จะได้เป็น MultiIndex columns ซึ่งอ่านยากหน่อยแต่ทำได้ครับ ผมแนะนำให้ flatten ออกก่อนด้วย df.columns = [‘_’.join(col) for col in df.columns] เพื่อให้ง่ายต่อการใช้งานต่อ

Resources & Related

Additional Notes

read_excel คือประตูด่านแรกที่คนทำงาน Excel มักเจอตอนเริ่มใช้ pandas ครับ มันทำหน้าที่โหลดไฟล์ .xlsx หรือ .xls เข้ามาเป็น DataFrame พร้อมใช้งานทันที รองรับทั้งการอ่าน sheet เดียว หลาย sheet หรือเลือกเฉพาะบางคอลัมน์ที่ต้องการ

ที่เจ๋งคือ pandas อ่านโครงสร้าง header ให้อัตโนมัติ — แถวบนสุด (หรือแถวที่เราระบุ) กลายเป็นชื่อคอลัมน์ ไม่ต้องมานั่งตั้งชื่อเองทีละคอลัมน์เหมือนกับตอนที่เราเปิดไฟล์ใน Excel แล้ว freeze row แรกไว้เป็น header นั่นแหละครับ

ส่วนตัวผมมองว่า read_excel กับ to_excel คือคู่หูที่แยกกันไม่ออก — อ่านเข้ามาแปรรูปข้อมูล แล้วส่งออกกลับเป็น Excel ก็ใช้ to_excel ครับ ใครทำงานสาย Excel automation ต้องรู้จักทั้งสองตัวนี้เลย 😎

Leave a Reply

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