Nghệ Thuật Làm Sạch Dữ Liệu: Xử Lý Dữ Liệu Thiếu (NaN) Trong Pandas

lúc 17:47 23 tháng 8, 2026
9 views
Nghệ Thuật Làm Sạch Dữ Liệu: Xử Lý Dữ Liệu Thiếu (NaN) Trong Pandas

Trong thế giới thực tế, dữ liệu chưa bao giờ hoàn hảo. Khi bạn nạp một tập tin dữ liệu từ bên ngoài vào DataFrame, việc xuất hiện các ô trống, giá trị bị khuyết (NaN - Not a Number) là chuyện cơm bữa. Nếu bạn đem thẳng những tập dữ liệu "lủng củng" này đi huấn luyện mô hình Machine Learning hoặc phân tích thống kê, kết quả nhận lại sẽ cực kỳ sai lệch, thậm chí chương trình sẽ lập tức bắn ra lỗi.

Chính vì vậy, quy trình xử lý dữ liệu thiếu là một kỹ năng bắt buộc phải có của bất kỳ Data Analyst hay Data Scientist nào. Bài viết này sẽ cung cấp một checklist chi tiết giúp bạn đi qua 4 bước xử lý từ phát hiện, quyết định cho đến kiểm tra lại một cách mượt mà nhất! 👇

🟦 1. Bước phát hiện (Detection)

Trước khi chữa bệnh, bạn phải biết bệnh nằm ở đâu. Phát hiện dữ liệu thiếu là bước đầu tiên để định hình mức độ nghiêm trọng của tập dữ liệu:

  • Lập bản đồ Boolean: Kiểm tra các ô trống dưới dạng bảng giá trị True/False bằng hàm df.isna() hoặc df.isnull().
  • Thống kê tổng số lượng thiếu: Tính tổng số lượng dòng bị khuyết cho từng cột bằng câu lệnh kinh điển: df.isna().sum().
  • Tính tỷ lệ phần trăm dữ liệu thiếu: Chạy lệnh df.isna().mean() * 100 để đo lường chính xác tỷ lệ trống của mỗi cột, từ đó đưa ra quyết định chiến lược: nên xóa bỏ cột đó hay tìm cách điền dữ liệu thay thế.

🟩 2. Bước quyết định: Xóa bỏ (Dropping)

Khi một cột hoặc một dòng bị thiếu quá nhiều dữ liệu và không thể cứu vãn, phương án nhanh gọn nhất là loại bỏ chúng khỏi DataFrame:

  • Xóa toàn bộ dòng lỗi: Biết cách dùng df.dropna() để loại bỏ toàn bộ các dòng có chứa bất kỳ giá trị NaN nào.
  • Xóa chọn lọc theo cột trọng yếu: Sử dụng tham số subset=['tên_cột'] để chỉ xóa các hàng nếu chúng bị thiếu dữ liệu ở một cột quan trọng cố định (ví dụ: cột ID_Khách_Hàng bắt buộc phải có).
  • Xóa hẳn cột vô giá trị: Sử dụng tham số axis=1 để xóa luôn cả một cột nếu cột đó có tỷ lệ trống quá lớn (ví dụ: trống trên 80% dung lượng bảng).

🟨 3. Bước quyết định: Điền đầy (Imputation/Filling)

Xóa dữ liệu đôi khi làm mất đi lượng thông tin quý giá. Thay vào đó, kỹ thuật điền đầy giá trị vào chỗ trống thường được ưu tiên hơn:

  • Điền giá trị mặc định cụ thể: Đưa một giá trị mặc định cụ thể (như số 0, hoặc chuỗi 'Chưa xác định') vào vùng bị trống bằng hàm df.fillna().
  • Điền thông minh bằng giá trị thống kê: Thực hiện kỹ thuật điền nâng cao bằng cách tính giá trị trung bình (mean()) hoặc trung vị (median()) của chính cột đó trước, rồi ném giá trị vừa tính được vào hàm fillna().
  • Điền theo chuỗi thời gian: Áp dụng cơ chế điền method='ffill' (lấy giá trị dòng phía trên điền xuống dưới) hoặc method='bfill' (lấy dòng phía dưới điền ngược lên trên) cho các tập dữ liệu chuỗi thời gian liên tục.

🟥 4. Kiểm tra sau khi xử lý (Post-validation)

Đừng vội mừng khi đã viết xong câu lệnh fill hay drop. Bước kiểm định cuối cùng sẽ cứu bạn khỏi những lỗi logic ngớ ngẩn:

  • Lưu lại thay đổi vào DataFrame gốc: Đảm bảo rằng bạn đã gán lại dữ liệu (ví dụ: df = df.fillna(...)) hoặc sử dụng trực tiếp tham số inplace=True để lưu lại các thay đổi vào biến DataFrame của mình.
  • Kiểm tra dứt điểm lần cuối: Chạy lại câu lệnh df.isna().sum() một lần cuối để kiểm tra chắc chắn rằng kết quả trả về toàn bộ bằng số 0 trước khi đem dữ liệu đi phân tích sâu hoặc chạy mô hình AI.
💡 Mẹo nhỏ cho bạn: Xử lý missing values khéo léo chính là ranh giới phân định giữa một beginner và một Data Scientist chuyên nghiệp. Hãy mở ngay Jupyter Notebook lên, thử cố tình tạo một vài ô NaN giả lập và thực hành các câu lệnh trên nhé!

Bạn đã hoàn thành được bao nhiêu dấu [ ] trong danh sách kiểm tra này rồi? Hãy để lại bình luận chia sẻ tiến độ học tập của bạn ở bên dưới nhé! 👇

Bình luận

Đăng nhập để để lại bình luận.
Chưa có bình luận nào cho bài viết này.

Bài viết liên quan