Vì sao nên làm sạch dữ liệu bằng pandas thay vì làm thủ công?

Làm sạch dữ liệu trong pandas là việc đáng làm vì mỗi bước đều được ghi lại và có thể chạy lại với tệp xuất của tháng sau chỉ trong vài giây, còn chỉnh sửa thủ công trong bảng tính thì chậm, dễ quên và không thể kiểm tra lại lịch sử xử lý.

Hãy hình dung một chuỗi cửa hàng cây cảnh giả định có bốn cơ sở, Fernhill Gardens. Chuyên viên phân tích tài chính Tomasz nhận được tệp CSV đơn hàng trực tuyến hằng tháng. Trong mẫu dưới đây, cùng một đơn hàng xuất hiện hai lần, tên cơ sở được nhập theo nhiều cách, số tiền chứa ký hiệu tiền tệ và dấu phẩy, ngày tháng dùng lẫn định dạng ngày đứng trước và năm đứng trước, còn giá trị thiếu xuất hiện dưới dạng ô trống, 'N/A' và '-'. Sửa thủ công mất một ngày mà tổng số vẫn không bao giờ khớp hẳn với báo cáo của đơn vị cung cấp dịch vụ thanh toán.

order_idsiteorder_dateamountpostcode
10231Leeds03/11/2026£1,240.00LS6
10231Leeds03/11/2026£1,240.00LS6
10232leeds2026-11-0486.50Không áp dụng
10233YORK05/11/2026-YO1
10234Harrogate142

Làm thế nào để làm sạch dữ liệu bằng pandas theo từng bước?

Làm sạch dữ liệu trong pandas bằng cách khai báo các ký hiệu biểu thị giá trị thiếu khi nạp dữ liệu, kiểm tra dữ liệu, chuẩn hóa văn bản, chuyển đổi số và ngày tháng, loại bỏ bản ghi trùng lặp, quyết định cách xử lý những chỗ còn thiếu, rồi đối chiếu kết quả với một số tổng đáng tin cậy. Làm theo thứ tự này giúp tránh việc sửa ở bước sau làm hỏng kết quả của bước trước.

1. Khai báo các ký hiệu biểu thị dữ liệu thiếu khi nạp dữ liệu

Hàm read_csv của pandas đọc tệp vào một DataFrame. Đối số na_values cho phép bạn liệt kê thêm các chuỗi, chẳng hạn như 'N/A' và '-', để coi là giá trị thiếu, ngoài những giá trị mặc định mà pandas đã nhận diện, chẳng hạn như các trường trống. Khai báo chúng tại đây giúp bạn không phải tìm lại về sau.

2. Kiểm tra trước khi thay đổi bất cứ điều gì

Xem các hàng đầu tiên bằng head, kiểu dữ liệu của các cột và số giá trị không bị thiếu bằng info, cùng số giá trị bị thiếu trong mỗi cột bằng cách kết hợp isna với sum. Ghi lại những gì bạn phát hiện: tại Fernhill, amount được lưu dưới dạng văn bản và order_date có nhiều định dạng khác nhau.

3. Chuẩn hóa văn bản

Dùng các phương thức xử lý chuỗi trên một cột: str.strip loại bỏ khoảng trắng ở đầu và cuối, còn str.lower hoặc str.title thống nhất cách viết hoa, để ' Leeds', 'leeds ' và 'LEEDS' được nhận diện là cùng một địa điểm. Sau đó, dùng unique để liệt kê các giá trị duy nhất và phát hiện những cách viết khác còn sót lại.

4. Chuyển đổi số

Loại bỏ ký hiệu tiền tệ và dấu phẩy phân cách hàng nghìn bằng str.replace, rồi chuyển đổi bằng to_numeric. Đặt đối số errors thành coerce sẽ biến mọi giá trị không thể phân tích thành giá trị thiếu thay vì dừng xử lý, nhờ đó bạn có thể đếm và kiểm tra những hàng này thay vì để chúng bị mất mà không hay biết.

5. Chuyển đổi ngày tháng

to_datetime chuyển văn bản thành ngày tháng đúng định dạng. Với dữ liệu có nhiều định dạng, hãy chỉ định rõ định dạng khi có thể, hoặc đặt dayfirst cho ngày tháng theo kiểu Anh, và đặt errors thành coerce để những ngày không phân tích được trở thành NaT, ký hiệu của pandas cho ngày bị thiếu. Lưu ý rằng dayfirst là một tùy chọn ưu tiên, không phải quy tắc bắt buộc, nên hãy kiểm tra kết quả.

6. Xóa các mục trùng lặp

drop_duplicates loại bỏ các hàng trùng lặp. Theo mặc định, một hàng chỉ được coi là trùng lặp nếu mọi cột đều khớp; đối số subset cho phép xác định hàng trùng lặp dựa trên các cột được chọn, chẳng hạn như order_id, còn keep quyết định giữ lại bản đầu tiên hay cuối cùng.

7. Quyết định cách xử lý những điểm còn thiếu

dropna loại bỏ các hàng có giá trị bị thiếu, nhưng theo mặc định, hàm này loại bỏ một hàng nếu bất kỳ cột nào bị thiếu giá trị. Dùng đối số subset để chỉ loại bỏ những hàng thiếu dữ liệu bạn thực sự cần, chẳng hạn như amount, hoặc dùng fillna để điền giá trị chỉ định vào chỗ trống. Sau đó dùng astype để đặt kiểu dữ liệu cuối cùng cho các cột, ví dụ kiểu category cho site.

Một lượt làm sạch dữ liệu chưa tốt và một lượt đã cải thiện khác nhau như thế nào?

Cách xử lý sơ sài là tải tệp bằng read_csv, gọi dropna không có đối số rồi gọi drop_duplicates cũng không có đối số. Vì mã bưu chính thường bị bỏ trống, dropna loại bỏ một phần lớn đơn hàng hợp lệ; còn vì ' Leeds' và 'leeds ' vẫn khác nhau, một số bản ghi trùng vẫn còn. Doanh thu tính ra thấp hơn thực tế rất nhiều mà không ai biết những dòng nào đã bị xóa.

Lần xử lý được cải thiện khai báo 'N/A' và '-' là giá trị thiếu khi nạp dữ liệu, loại bỏ khoảng trắng thừa và viết hoa chữ cái đầu mỗi từ trong site, chuyển đổi amount bằng to_numeric sau khi bỏ '£' và dấu phẩy, chuyển đổi order_date bằng dayfirst và coerce, loại bỏ bản ghi trùng dựa trên order_id và giữ bản đầu tiên, rồi chỉ loại những hàng thiếu amount. Sau đó, chương trình in ra số hàng bị loại ở từng bước và so sánh tổng doanh thu với báo cáo của đơn vị cung cấp dịch vụ thanh toán. Giờ đây, Tomasz có thể giải thích mọi chênh lệch.

Làm thế nào để kiểm tra xem việc làm sạch dữ liệu có hiệu quả hay không?

Kiểm tra việc làm sạch dữ liệu bằng cách đếm số hàng trước và sau mỗi bước, đối chiếu một tổng số quan trọng với nguồn độc lập, rồi xem lại những hàng có giá trị bị chuyển thành giá trị thiếu. Chạy lại info để xác nhận kiểu dữ liệu của các cột và liệt kê các giá trị không trùng lặp cho những trường phân loại như địa điểm. Nếu một bước đã loại bỏ nhiều hàng hơn dự kiến, hãy xem các hàng đó trước khi tiếp tục.

Trợ lý AI có thể hỗ trợ làm sạch dữ liệu bằng pandas như thế nào?

Trợ lý AI có thể soạn các bước làm sạch dữ liệu nếu bạn mô tả từng cột, vấn đề của cột đó và quy tắc bạn muốn áp dụng; nó cũng có thể giải thích các hàm bạn chưa quen. Hãy mô tả cấu trúc bằng các giá trị ví dụ tự tạo thay vì dán dữ liệu khách hàng thật như tên, địa chỉ hoặc mã bưu chính đầy đủ. Yêu cầu trợ lý báo cáo số hàng sau mỗi bước, và đối chiếu từng đối số hàm mà nó dùng với tài liệu chính thức của pandas, vì đôi khi trợ lý đề xuất những tùy chọn không tồn tại hoặc đã thay đổi giữa các phiên bản.

Những sai lầm thường gặp khi làm sạch dữ liệu bằng pandas là gì?

Sai lầm phổ biến nhất là gọi dropna mà không có đối số và làm mất những hàng vốn không có vấn đề gì ngoài việc thiếu dữ liệu ở một cột không bắt buộc. Những sai lầm khác gồm: xóa dữ liệu trùng lặp trước khi chuẩn hóa văn bản, chuyển đổi ngày mà không kiểm tra thứ tự ngày và tháng, ghi đè tệp gốc, và không bao giờ so sánh tổng sau khi làm sạch với một con số đáng tin cậy.

Bài học này nằm ở đâu trên Tosheo.ai?

Đây là bài học lập trình thuộc danh mục khoa học và phân tích dữ liệu của khóa học khoa học dữ liệu. Mọi chủ đề trên Tosheo.ai đều bắt đầu bằng khái niệm và thực hành không cần lập trình; các bài học lập trình là lộ trình chuyên sâu tùy chọn: sau khi đăng ký, trong phiên bản thực hành đầy đủ của bài học này, bạn sẽ viết và chạy từng bước làm sạch dữ liệu bằng Python với pandas, rồi được chấm theo bảng tiêu chí. Nếu mới làm quen với Python, hãy bắt đầu bằng khóa học Python. Khóa học giúp xây dựng kỹ năng thực tế, không phải chương trình đào tạo cấp tốc hay cam kết việc làm.

Nguồn và phạm vi

Tài liệu pandas: read_csv (đã kiểm tra ngày 19 tháng 10 năm 2026) ↗

Hướng dẫn sử dụng pandas: làm việc với dữ liệu thiếu (đã kiểm tra ngày 19 tháng 10 năm 2026) ↗

Tài liệu pandas: DataFrame.dropna (đã kiểm tra ngày 19 tháng 10 năm 2026) ↗

Tài liệu pandas: DataFrame.drop_duplicates (đã kiểm tra ngày 19 tháng 10 năm 2026) ↗

Tài liệu pandas: DataFrame.astype (đã kiểm tra ngày 19 tháng 10 năm 2026) ↗

Tài liệu pandas: to_numeric (đã kiểm tra ngày 19 tháng 10 năm 2026) ↗

Tài liệu pandas: to_datetime (đã kiểm tra ngày 19 tháng 10 năm 2026) ↗

Tài liệu pandas: Series.str.strip (đã kiểm tra ngày 19 tháng 10 năm 2026) ↗