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… |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
read_excel คือประตูด่านแรกที่คนทำงาน Excel มักเจอตอนเริ่มใช้ pandas ครับ มันทำหน้าที่โหลดไฟล์ .xlsx หรือ .xls เข้ามาเป็น DataFrame พร้อมใช้งานทันที รองรับทั้งการอ่าน sheet เดียว หลาย sheet หรือเลือกเฉพาะบางคอลัมน์ที่ต้องการ
ที่เจ๋งคือ pandas อ่านโครงสร้าง header ให้อัตโนมัติ — แถวบนสุด (หรือแถวที่เราระบุ) กลายเป็นชื่อคอลัมน์ ไม่ต้องมานั่งตั้งชื่อเองทีละคอลัมน์เหมือนกับตอนที่เราเปิดไฟล์ใน Excel แล้ว freeze row แรกไว้เป็น header นั่นแหละครับ
ส่วนตัวผมมองว่า read_excel กับ to_excel คือคู่หูที่แยกกันไม่ออก — อ่านเข้ามาแปรรูปข้อมูล แล้วส่งออกกลับเป็น Excel ก็ใช้ to_excel ครับ ใครทำงานสาย Excel automation ต้องรู้จักทั้งสองตัวนี้เลย 😎
ผมอ่านไฟล์ Excel เข้ามาเป็น DataFrame ด้วยคำสั่งเดียวครับ แถวแรกของ Excel จะกลายเป็นชื่อคอลัมน์อัตโนมัติ ในงานจริงแค่แทน buf ด้วย path ไฟล์ เช่น pd.read_excel('sales_2024.xlsx') ก็ใช้งานได้เลย
ผมระบุชื่อ sheet ว่า 'employees' และเลือกเฉพาะคอลัมน์ name กับ age มาเท่านั้นครับ ถ้าไฟล์มีหลาย sheet วิธีนี้สะดวกมาก ไม่ต้องโหลดข้อมูลทั้งหมดให้หนักโดยไม่จำเป็น
บางครั้งผมเจอไฟล์ Excel ที่แถวแรกไม่ใช่ชื่อคอลัมน์ แต่เป็นข้อมูลจริงๆ เลยครับ ใส่ header=None ไว้ pandas จะตั้งชื่อคอลัมน์เป็นตัวเลข 0, 1, 2… แทน แล้วค่อยเปลี่ยนชื่อทีหลังด้วย df.columns = ['name', 'age'] ได้
ใส่ sheet_name=None แล้วจะได้ dict กลับมา key คือชื่อ sheet value คือ DataFrame ของแต่ละ sheet ครับ ผมใช้วิธีนี้ตอนไฟล์มีข้อมูลแยกรายเดือนไว้ใน sheet ต่างๆ แล้วอยากรวมทุก sheet เข้าด้วยกัน
ต้องติดตั้ง 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] เพื่อให้ง่ายต่อการใช้งานต่อ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas read_excel จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
read_csv ใน pandas ผมใช้สำหรับโหลดข้อมูลจากไฟล์ CSV หรือ text ที่มีตัวคั่นเข้ามาเป็น DataFrame พร้อมใช้งาน ถ้าใครเคยเปิดไฟล์ CSV ใน Excel แล้วได้ตารางให้แก้งานต่อ read_csv ก็คือสิ่งเดียวกันเลยครับแต่สำหรับ Python
to_csv ใน pandas ผมใช้สำหรับส่งออกข้อมูลใน DataFrame ให้เป็น CSV ไม่ว่าจะเซฟเป็นไฟล์หรือแปลงเป็น string ก็ทำได้ครับ เหมือนกับการกด Save As → CSV ใน Excel แต่ทำผ่านโค้ดได้เลย
head ใน pandas ผมใช้สำหรับดูข้อมูลแถวแรกๆ ของ DataFrame เพื่อเช็กว่าโหลดข้อมูลมาถูกต้องหรือเปล่า คล้ายกับการ scroll ไปดูบนสุดของตาราง Excel เลยครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่