📗 BÀI 2: TỰ ĐỘNG LỌC VÀ TÁCH MỘT FILE TỔNG THÀNH NHIỀU FILE CHI NHÁNH THEO ĐIỀU KIỆN

🎯 1. Mục tiêu bài học

  • Làm chủ kỹ thuật gom nhóm và lọc dữ liệu tự động bằng hàm .groupby() trong thư viện pandas.
  • Tự động hóa quy trình tách một bảng dữ liệu tổng thành hàng chục, hàng trăm file Excel riêng lẻ theo danh mục chỉ với một lần bấm máy.
  • Loại bỏ hoàn toàn các thao tác lặp đi lặp lại tốn thời gian trên Excel (Filter –> Copy –> Mở file mới –> Paste –> Save).

💼 2. Tình huống thực tế & Giải pháp

  • 📌 Tình huống: Đầu tháng, bộ phận tổng hợp có một file dữ liệu lớn chứa doanh thu của cả 3 miền (Bắc, Trung, Nam). Nhiệm vụ của chú/các bạn là phải tách file này thành 3 file Excel riêng biệt tương ứng với dữ liệu của từng miền (ví dụ: BaoCao_Bac.xlsx, BaoCao_Trung.xlsx…) để gửi cho các Trưởng chi nhánh đối soát.
  • ⚠️ Cách làm thủ công: Bật tính năng Filter trong Excel –> Chọn miền “Bac” –> Copy dữ liệu hiển thị –> Tạo file mới –> Paste –> Lưu tên file. Tiếp tục lặp lại chu kỳ này cho miền Trung và miền Nam. Nếu doanh nghiệp mở rộng ra 63 tỉnh thành, chúng ta sẽ phải làm thao tác này 63 lần, rất dễ dẫn đến sai sót hoặc đặt tên file không đồng bộ.
  • 🚀 Giải pháp Python: Chúng ta sẽ ra lệnh cho Python đọc file tổng, tự động nhận diện xem có bao nhiêu miền khác nhau, sau đó tự động gom nhóm dữ liệu và “xuất bản” ra các file Excel chi nhánh tương ứng trong nháy mắt.

📊 3. File dữ liệu mẫu (Data Mockup)

Học viên hãy sử dụng lại file kết quả tổng hợp từ Bài 1 hoặc tạo một file Excel mới tên là File_Tong_Hop.xlsx chứa tối thiểu 15 dòng dữ liệu dưới đây:

STTNgayMa_Don_HangSan_PhamSo_LuongDon_GiaMien
12026-07-01DH001Laptop Dell215000000Bac
22026-07-01DH002Chuot Logitech10250000Bac
32026-07-02DH003Ban Phim Co51200000Bac
42026-07-02DH004Man Hinh Asus33500000Bac
52026-07-03DH005Tai Nghe Sony42000000Bac
62026-07-01DH006iPhone 15122000000Trung
72026-07-01DH007Op Lung20150000Trung
82026-07-02DH008Sac Du Phong8500000Trung
92026-07-02DH009Cap Sac Type-C15100000Trung
102026-07-03DH010Loa Bluetooth21800000Trung
112026-07-01DH011May In Canon14500000Nam
122026-07-01DH012Giay In A45065000Nam
132026-07-02DH013Muc In5300000Nam
142026-07-02DH014O Cung SSD121200000Nam
152026-07-03DH015USB 64GB25180000Nam

🛠️ 4. Hướng dẫn thực hành cầm tay chỉ việc

🔹 Bước 1: Chuẩn bị thư mục

Để các file chi nhánh sau khi tách không bị trộn lẫn với các file khác, chúng ta nên tạo sẵn một thư mục riêng mang tên Ket_Qua_Tach_File nằm cùng cấp với file chạy Python.

🔹 Bước 2: Viết mã nguồn Python

Hãy sao chép đoạn mã nguồn có chú thích chi tiết dưới đây vào môi trường làm việc (Jupyter Notebook hoặc VS Code) của bạn:

Python

import os
import pandas as pd

# 1. Khai báo tên file tổng và thư mục đích dùng để lưu các file sau khi tách
file_tong = "File_Tong_Hop.xlsx"
thu_muc_luu = "Ket_Qua_Tach_File"

# Tự động tạo thư mục lưu nếu máy tính của bạn chưa có thư mục này
if not os.path.exists(thu_muc_luu):
    os.makedirs(thu_muc_luu)
    print(f"👉 Đã tự động tạo thư mục mới: {thu_muc_luu}")

# 2. Đọc toàn bộ dữ liệu từ file Excel tổng vào bộ nhớ của Python
print("📖 Đang đọc dữ liệu từ file tổng...")
df = pd.read_excel(file_tong)

# 3. Sử dụng groupby() để phân loại và gom nhóm dữ liệu theo giá trị ở cột 'Mien'
print("⚡ Bắt đầu tiến trình tách file tự động...")
for ten_mien, data_mien in df.groupby("Mien"):

    # Định nghĩa tên file xuất ra (Ví dụ: Ket_Qua_Tach_File/BaoCao_Bac.xlsx)
    ten_file_xuat = os.path.join(thu_muc_luu, f"BaoCao_{ten_mien}.xlsx")

    # 4. Xuất dữ liệu của riêng miền đó ra file Excel, lược bỏ cột chỉ số dòng (index=False)
    data_mien.to_excel(ten_file_xuat, index=False)

    print(f"   -> Xuất thành công file cho miền: 【{ten_mien}】")

print("---")
print("🎉 HOÀN THÀNH! Toàn bộ file chi nhánh đã được tách và lưu trữ ngăn nắp.")

💡 Giải thích mã nguồn chi tiết cho dân văn phòng:

  • df.groupby('Mien'): Đây là tính năng cốt lõi của bài học. Nó hoạt động tương tự như việc bạn kéo cột ‘Mien’ vào ô Row trong Pivot Table. Python sẽ tự động dò quét cột này và nhận diện được 3 nhóm duy nhất: Bac, Trung, Nam.
  • for ten_mien, data_mien in ...: Vòng lặp này giúp xử lý tuần tự từng nhóm. Ở lượt chạy đầu tiên, biến ten_mien sẽ nhận giá trị chuỗi là 'Bac', và biến data_mien sẽ giữ toàn bộ bảng dữ liệu gồm 5 dòng thuộc về miền Bắc.
  • os.makedirs(thu_muc_luu): Lệnh này giúp code thông minh hơn. Nếu bạn quên chưa tạo folder chứa kết quả trên máy tính, Python sẽ tự động tạo hộ bạn, tránh việc chương trình bị báo lỗi dừng hoạt động.

📉 5. Đánh giá hiệu quả khi áp dụng bài giảng

📊 Tiêu chí📋 Thao tác lọc (Filter) thủ công trên Excel🤖 Tự động hóa bằng Python🏆 Hiệu quả thực tế
Tốc độ xử lýMất khoảng 3 – 5 phút cho 3 miền. Sẽ mất cả tiếng nếu phải tách cho 63 tỉnh thành.Chỉ mất 0.5 giây, tốc độ xử lý gần như tức thì và không phụ thuộc vào số file cần tách.Tối ưu vượt trội. Tiết kiệm thời gian tuyệt đối khi quy mô dữ liệu lớn.
Độ ổn địnhDễ bấm nhầm ô dữ liệu, đặt sai tên file hoặc lưu đè lên file cũ.Tên file được thiết lập tự động đồng bộ theo cấu trúc lập trình sẵn.Độ chính xác cao. Loại bỏ hoàn toàn các sai sót vô ý của con người.
Khả năng mở rộngKhi phát sinh thêm chi nhánh mới, bạn lại phải làm lại các thao tác từ đầu.Tự động cập nhật. Dữ liệu gốc có thêm bao nhiêu miền mới thì code vẫn chạy tốt.Linh hoạt. Hệ thống tự động thích ứng với sự thay đổi của dữ liệu.

📝 6. Bài tập mở rộng tự thực hành cho học viên

  • 💪 Đề bài tập: Trong thực tế, sau khi tách file cho từng miền, Sếp thường yêu cầu bạn gửi một file tổng hợp riêng cho các sản phẩm thuộc nhóm cao cấp để theo dõi riêng.Yêu cầu: Hãy nâng cấp hoặc viết thêm một đoạn code ngắn để trích xuất riêng những dòng đơn hàng có sản phẩm là "iPhone 15" hoặc "Laptop Dell" ra một file Excel độc lập mang tên SanPham_CaoCap.xlsx.
  • 💡 Hướng dẫn gợi ý: Học viên sử dụng tính năng lọc theo điều kiện dạng danh sách của pandas bằng hàm .isin(['Laptop Dell', 'iPhone 15']). Cú pháp mẫu: df_caocap = df[df['San_Pham'].isin(['Laptop Dell', 'iPhone 15'])], sau đó dùng lệnh .to_excel() để xuất file.
Scroll to Top