read_excel ใน pandas ผมใช้สำหรับโหลดข้อมูลจากไฟล์ .xlsx หรือ .xls เข้ามาเป็น DataFrame เพื่อวิเคราะห์ต่อใน Python ถ้าเคยเปิดไฟล์ Excel แล้วก็อปข้อมูลไปทำงานต่อ ตัวนี้ทำแบบเดียวกันแต่อัตโนมัติเลยครับ
pd.read_excel(io, sheet_name, usecols, header)
pd.read_excel(io, sheet_name, usecols, header)
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… |
pd.read_excel(buf)pd.read_excel(buf)
name age
0 Ann 30
1 Bob 25
pd.read_excel(buf, sheet_name='employees', usecols=['name', 'age'])pd.read_excel(buf, sheet_name='employees', usecols=['name', 'age'])
name age
0 Ann 30
1 Bob 25
pd.read_excel(buf, header=None)pd.read_excel(buf, header=None)
0 1
0 Ann 30
1 Bob 25
pd.read_excel(buf, sheet_name=None)pd.read_excel(buf, sheet_name=None)
{'Jan': name age
0 Ann 30, 'Feb': name age
0 Bob 25}
ต้องติดตั้ง openpyxl ด้วยครับ เพราะ pandas ใช้มันเป็น engine อ่านไฟล์ .xlsx ถ้าไม่มีจะขึ้น error ว่า ‘Missing optional dependency openpyxl’ ติดตั้งด้วย pip install openpyxl แค่ครั้งเดียวก็ใช้ได้เลย ส่วนไฟล์ .xls เก่าๆ ต้องใช้ engine=’xlrd’ แทนครับ
ใช้ df.to_excel(‘output.xlsx’, index=False) ครับ มันคือคู่หูของ read_excel เลย — อ่านเข้ามาด้วย read_excel แปรรูปข้อมูล แล้วบันทึกออกด้วย to_excel ผมใช้สองตัวนี้คู่กันตลอดเลยตอนทำ Excel automation
ได้ครับ ใส่ header=[0,1] เพื่อบอกให้ pandas ใช้แถว 0 และ 1 เป็น header ร่วมกัน ผลลัพธ์จะได้เป็น MultiIndex columns ซึ่งอ่านยากหน่อยแต่ทำได้ครับ ผมแนะนำให้ flatten ออกก่อนด้วย df.columns = [‘_’.join(col) for col in df.columns] เพื่อให้ง่ายต่อการใช้งานต่อ
read_excel คือประตูด่านแรกที่คนทำงาน Excel มักเจอตอนเริ่มใช้ pandas ครับ มันทำหน้าที่โหลดไฟล์ .xlsx หรือ .xls เข้ามาเป็น DataFrame พร้อมใช้งานทันที รองรับทั้งการอ่าน sheet เดียว หลาย sheet หรือเลือกเฉพาะบางคอลัมน์ที่ต้องการ
ที่เจ๋งคือ pandas อ่านโครงสร้าง header ให้อัตโนมัติ — แถวบนสุด (หรือแถวที่เราระบุ) กลายเป็นชื่อคอลัมน์ ไม่ต้องมานั่งตั้งชื่อเองทีละคอลัมน์เหมือนกับตอนที่เราเปิดไฟล์ใน Excel แล้ว freeze row แรกไว้เป็น header นั่นแหละครับ
ส่วนตัวผมมองว่า read_excel กับ to_excel คือคู่หูที่แยกกันไม่ออก — อ่านเข้ามาแปรรูปข้อมูล แล้วส่งออกกลับเป็น Excel ก็ใช้ to_excel ครับ ใครทำงานสาย Excel automation ต้องรู้จักทั้งสองตัวนี้เลย 😎