Thep Excel

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

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

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

ความนิยม5/10
ความยาก3/10
ประโยชน์5/10

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrame

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

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

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

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 ต้องรู้จักทั้งสองตัวนี้เลย 😎

Examples

ตัวอย่างที่ 1: อ่านไฟล์ Excel พื้นฐานpd.read_excel(buf)

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

>_
pd.read_excel(buf)

ผลลัพธ์ 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 วิธีนี้สะดวกมาก ไม่ต้องโหลดข้อมูลทั้งหมดให้หนักโดยไม่จำเป็น

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

ผลลัพธ์ 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'] ได้

>_
pd.read_excel(buf, header=None)

ผลลัพธ์ 0 1
0 Ann 30
1 Bob 25
ตัวอย่างที่ 4: อ่านทุก sheet พร้อมกันได้ dictpd.read_excel(buf, sheet_name=None)

ใส่ sheet_name=None แล้วจะได้ dict กลับมา key คือชื่อ sheet value คือ DataFrame ของแต่ละ sheet ครับ ผมใช้วิธีนี้ตอนไฟล์มีข้อมูลแยกรายเดือนไว้ใน sheet ต่างๆ แล้วอยากรวมทุก sheet เข้าด้วยกัน

>_
pd.read_excel(buf, sheet_name=None)

ผลลัพธ์{'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

ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas read_excel จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้pandas read_excelIO
IO (2)
pandas read_csv

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

pandas to_csv

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

Inspection (1)
pandas head

head ใน pandas ผมใช้สำหรับดูข้อมูลแถวแรกๆ ของ DataFrame เพื่อเช็กว่าโหลดข้อมูลมาถูกต้องหรือเปล่า คล้ายกับการ scroll ไปดูบนสุดของตาราง Excel เลยครับ

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่