Cách Đọc File Excel (.xlsx) Trong Python: Hướng Dẫn Chi Tiết Và Toàn Diện

Giới thiệu

Việc xử lý dữ liệu thường xuyên được lưu trữ trong các file Excel là một nhiệm vụ phổ biến trong nhiều lĩnh vực như tài chính, khoa học dữ liệu, quản trị kinh doanh và nhiều hơn nữa. Khi làm việc với Python, một ngôn ngữ lập trình linh hoạt và mạnh mẽ, có nhiều thư viện hỗ trợ để đọc, ghi, và phân tích dữ liệu từ file Excel. Trong bài viết này, chúng ta sẽ đi sâu vào cách đọc file Excel (.xlsx) bằng Python, khám phá các thư viện phổ biến như pandas, openpyxl, xlrd, và xlwt, cùng với các kĩ thuật nâng cao như xử lý sheet đa trang, đọc dữ liệu có định dạng phức tạp, và tối ưu hiệu suất khi làm việc với file lớn. Bài viết sẽ cung cấp ví dụ cụ thể, giải thích chi tiết từng bước, và chia sẻ những lời khuyên thực tiễn giúp bạn nhanh chóng thành thạo công việc này.

1. Tại sao Python là lựa chọn tốt cho việc đọc file Excel?

Python sở hữu một cộng đồng phát triển lớn với hàng trăm thư viện chuyên dụng cho việc xử lý dữ liệu dạng bảng. Các thư viện này được thiết kế để:

  • Đơn giản và trực quan: Cấu trúc API gần gũi với dữ liệu thực tế, giảm thiểu lượng code cần viết.
  • Tính mở rộng: Hỗ trợ các phiên bản Excel từ 2003 (.xls) đến 2026+ (.xlsx) và nhiều định dạng khác.
  • Tích hợp dễ dàng: Có thể kết hợp với các công cụ phân tích dữ liệu (NumPy, SciPy, scikit-learn) hoặc hiển thị dữ liệu (Matplotlib, Plotly) một cách liền mạch.
  • Hiệu suất cao: Thư viện như pandas tận dụng các kỹ thuật tối ưu, giảm thiểu thời gian đọc và ghi dữ liệu.

2. Các thư viện chính để đọc file Excel

2.1 pandas

pandas là thư viện phổ biến nhất để thao tác dữ liệu bảng trong Python. Khi đọc file Excel, pandas sử dụng thư viện openpyxl làm engine mặc định (đối với file .xlsx) và xlrd cho .xls.

  • Cài đặt:
    bash pip install pandas openpyxl

  • Cách đọc file:
    “`python
    import pandas as pd

df = pd.read_excel(‘du_lieu.xlsx’)
print(df.head())
“`

  • Đọc sheet cụ thể:
    python df = pd.read_excel('du_lieu.xlsx', sheet_name='DoanhThu')

  • Đọc nhiều sheet cùng lúc:
    python dfs = pd.read_excel('du_lieu.xlsx', sheet_name=None) # trả về dict {sheet_name: DataFrame}

  • Lọc dữ liệu khi đọc:
    python df = pd.read_excel('du_lieu.xlsx', usecols='A:D', skiprows=2, nrows=100)

2.2 openpyxl

Được dùng để đọc, viết và chỉnh sửa file Excel (.xlsx). Thư viện này hoạt động ở cấp độ ô, cho phép truy cập chi tiết tới thuộc tính của mỗi ô (định dạng, công thức, v.v.).

  • Cài đặt:
    bash pip install openpyxl

  • Cách đọc file:
    “`python
    from openpyxl import load_workbook

wb = load_workbook(‘du_lieu.xlsx’)
ws = wb.active # hoặc wb’Sheet1′

for row in ws.iter_rows(values_only=True):
print(row)
“`

  • Truy cập ô cụ thể:
    python cell = ws'B5' print(cell.value)

2.3 xlrd và xlwt

xlrd dùng để đọc file Excel 2003-2007 (.xls), còn xlwt dùng để ghi file Excel .xls. Tuy nhiên, kể từ phiên bản 2.0, xlrd chỉ hỗ trợ định dạng .xls, không còn hỗ trợ .xlsx. Do đó, khi làm việc với .xlsx, bạn nên dùng openpyxl hoặc pandas.

  • Cài đặt:
    bash pip install xlrd xlwt

  • Đọc file .xls:
    “`python
    import xlrd

book = xlrd.open_workbook(‘du_lieu.xls’)
sheet = book.sheet_by_index(0)

for row_idx in range(sheet.nrows):
print(sheet.row(row_idx))
“`

3. Hướng dẫn chi tiết: Đọc file Excel có cấu trúc phức tạp

3.1 Xử lý file có nhiều sheet

Giả sử file kpi.xlsx có 5 sheet: Sales, Marketing, Finance, HR, IT. Bạn muốn đọc tất cả sheet và lưu thành một dictionary DataFrame.

import pandas as pd file_path = 'kpi.xlsx'
dfs = pd.read_excel(file_path, sheet_name=None) # Đọc tất cả for sheet, df in dfs.items(): print(f"--- Sheet: {sheet} ---") print(df.head())

3.2 Đọc dữ liệu có header không trong dòng đầu tiên

Nếu dữ liệu bắt đầu từ dòng thứ 5, bạn có thể bỏ qua các dòng đầu tiên:

df = pd.read_excel('du_lieu.xlsx', header=4) # header=4 => dòng 5 làm header

3.3 Đọc dữ liệu có cột không dùng

Bạn chỉ muốn lấy cột A, C, E:

df = pd.read_excel('du_lieu.xlsx', usecols='A,C,E')

3.4 Đọc dữ liệu có công thức

Python Read Excel File Xlsx
Python Read Excel File Xlsx

pandas không đọc giá trị tính được từ công thức mà chỉ lấy giá trị lưu trữ. Để lấy giá trị thực tế, bạn cần dùng openpyxl:

from openpyxl import load_workbook wb = load_workbook('du_lieu.xlsx', data_only=True)
ws = wb.active
for row in ws.iter_rows(values_only=True): print(row)

3.5 Đọc dữ liệu có định dạng phức tạp (ví dụ: ngày tháng, số thập phân)

pandas tự động chuyển đổi kiểu dữ liệu, nhưng bạn có thể định nghĩa kiểu thủ công:

df = pd.read_excel('du_lieu.xlsx', dtype={'Date': 'str', 'Amount': 'float'})
df'Date' = pd.to_datetime(df'Date', format='%d/%m/%Y')

4. Đọc file Excel lớn (> 1M dòng)

Đọc file lớn có thể tiêu tốn bộ nhớ đáng kể. Dưới đây là một số kỹ thuật để tối ưu:

4.1 Đọc dữ liệu theo chunk

Sử dụng chunksize trong pandas.

chunksize = 100000
for chunk in pd.read_excel('du_lieu_lon.xlsx', chunksize=chunksize): # Xử lý từng chunk print(chunk.head())

4.2 Chỉ đọc một số cột cần thiết

Giảm kích thước bộ nhớ bằng cách chỉ lấy các cột quan trọng:

usecols = 'A', 'B', 'C'
df = pd.read_excel('du_lieu_lon.xlsx', usecols=usecols)

4.3 Sử dụng openpyxl với read_only=True

openpyxl cung cấp chế độ chỉ đọc để giảm bộ nhớ:

from openpyxl import load_workbook wb = load_workbook('du_lieu_lon.xlsx', read_only=True)
ws = wb.active
for row in ws.iter_rows(values_only=True): # Xử lý từng dòng process(row)

5. Chuyển đổi dữ liệu đã đọc thành định dạng khác

5.1 Xuất dữ liệu sang CSV

df.to_csv('du_lieu.csv', index=False)

5.2 Lưu dữ liệu vào cơ sở dữ liệu SQL

from sqlalchemy import create_engine engine = create_engine('sqlite:///du_lieu.db')
df.to_sql('kpi', con=engine, if_exists='replace', index=False)

6. Các mẹo bảo trì và tối ưu

Thứ tựMẹoLý do
1Cập nhật thư viện thường xuyênĐảm bảo tính tương thích và bảo mật.
2Kiểm tra lỗi khi đọc file (FileNotFound, PermissionError)Tránh bị crash trong quá trình tự động.
3Sử dụng try/except khi đọc sheet không tồn tạiDễ dàng xử lý ngoại lệ.
4Kiểm tra kiểu dữ liệu sau khi đọcĐảm bảo công việc phân tích dữ liệu chính xác.
5Ghi chú rõ ràng trong codeDễ bảo trì cho các thành viên khác.

7. Ví dụ thực tế: Tự động tổng hợp báo cáo doanh thu

Giả sử bạn có file doanhthu.xlsx với sheet theo từng tháng. Bạn muốn tự động tính tổng doanh thu, số lượng giao dịch, và lưu kết quả vào file tongsuatchieu.xlsx.

import pandas as pd # Đọc tất cả sheet
dfs = pd.read_excel('doanhthu.xlsx', sheet_name=None) summary = pd.DataFrame(columns='Tháng', 'DoanhThu', 'GiaoDich') for month, df in dfs.items(): total_sales = df'DoanhThu'.sum() total_transactions = df'GiaoDich'.count() summary = summary.append({ 'Tháng': month, 'DoanhThu': total_sales, 'GiaoDich': total_transactions }, ignore_index=True) # Lưu kết quả
summary.to_excel('tongsuatchieu.xlsx', index=False)
print("Báo cáo đã được ghi thành công!")

8. Tổng kết

  • Python cung cấp nhiều thư viện mạnh mẽ để đọc file Excel, trong đó pandas và openpyxl là lựa chọn hàng đầu.
  • Bạn có thể đọc dữ liệu từ file .xlsx một cách linh hoạt: chọn sheet, cột, bỏ qua dòng, lấy giá trị công thức, xử lý định dạng.
  • Đối với file lớn, hãy tận dụng kỹ thuật chunk, chỉ đọc cột cần thiết, hoặc dùng openpyxl read_only.
  • Tích hợp dữ liệu đã đọc với các công cụ khác (CSV, SQL, phân tích nâng cao) giúp mở rộng quy trình làm việc.
  • Cuối cùng, luôn kiểm tra và đảm bảo tính ổn định của code bằng cách thêm các phần kiểm tra lỗi và ghi chú đầy đủ.

Với những kiến thức và ví dụ trên, bạn đã sẵn sàng để xử lý bất kỳ file Excel nào trong dự án Python của mình. Hãy thực hành, thử nghiệm và chia sẻ những trường hợp đặc biệt mà bạn gặp phải – cộng đồng Python luôn sẵn sàng hỗ trợ!

⚠️
LƯU Ý QUAN TRỌNG: Miễn trừ trách nhiệm: Mặc dù chúng tôi luôn nỗ lực để đảm bảo tính chính xác và cập nhật của thông tin, nhưng các quy định về giáo dục và tuyển sinh có thể thay đổi theo thời gian. BigSchool không chịu trách nhiệm về bất kỳ sai sót nào hoặc kết quả phát sinh từ việc sử dụng thông tin trên trang này. Độc giả nên liên hệ trực tiếp với nhà trường hoặc cơ quan chức năng để có thông tin mới nhất. Ngoài ra, BigSchool tuyệt đối không bán sản phẩm, khóa học hay cung cấp dịch vụ được nhắc đến trong bài.

Viết một bình luận