Hướng dẫn dùng python dropna python
Khi mới bắt đầu làm quen với việc xây dựng Machine Learning Model với Python, chúng ta thường sử dụng dữ liệu mẫu từ các trang như UCI, Kaggle và TensorFlow Dataset. Đa phần dữ liệu mẫu có chất lượng rất tốt về mọi mặt từ sự cân bằng (Balance) cho đến tính toàn vẹn (Completeness) và sự nhất quán (Consistency). Tuy nhiên trong thực tế, dữ liệu không hoàn toàn đạt được chất lượng cao như vậy, đôi khi một giá trị trong cột không chính xác vì lỗi đánh máy, hoặc có khi không cân bằng giữa các label với nhau hay thậm chí phổ biến hơn là thiếu sót dữ liệu (Missing data). Trong bài viết này, mình sẽ hướng dẫn các bạn quy trình căn bản và các kỹ thuật để xử lý các ô dữ liệu trống trong bảng bằng Python. Show Chuẩn bịTương tự như những bài viết khác, đầu tiên chúng ta sẽ chuẩn bị các gói thư viện cần thiết và đọc dữ liệu vào. Các bạn có thể tham khảo bài viết này nếu muốn tìm hiểu các thủ thuật đọc dữ liệu CSV: https://datasciencevn.com/python/144-cac-thu-thuat-doc-du-lieu-csv-vao-pandas-data-frame.html Trước hết các bạn cài đặt pandas nếu chưa từng cài trên môi trường Python nội bộ.
Sau đó bạn khai báo thư viện này trong Notebook bằng đoạn
code sau (gói thư viện
Tiếp theo bạn kiểm tra và thiết lập một biến
Giờ chúng ta sẽ đọc dữ liệu từ file
Kiểm tra dữ liệu trốngĐầu tiên chúng ta cần xác định số lượng ô dữ liệu trống trong bảng.
Với hàm info(), chúng ta có thể nhanh chóng kiểm tra thông tin sơ bộ về bảng dữ liệu này. Tổng cộng bảng dữ liệu có 100 dòng, trong đó cột V1 có 97 ô “không trống”, nghĩa là có 3 ô trống trong cột này. Tương tự, cột V2, V3 và V4 có lần lượt là 5, 4 và 6 ô trống. Để kiểm tra riêng lẻ cho từng cột, các bạn có thể dùng hàm
Hàm này sẽ kiểm tra từng ô một và trả về True nếu ô đó là NaN, None hoặc NaT (Datetime). Để đếm số ô trống trong cột này, bạn có thể dùng dòng code sau.
Như vậy tổng cộng có 6 ô trống trong cột V4, các bạn có thể thực hiện tương tự cho các cột còn lại. Trong trường hợp bạn muốn kiểm tra tất cả các cột cùng một lúc, bạn có thể chạy vòng lặp cho từng cột như sau (Sử dụng Dictionary hoặc List Comprehension)
Bây giờ chúng ta muốn xem chi tiết hơn về các dòng có chứa ô trống. Chẳng hạn như liệt kê các dòng trong bảng mà ô V1 bị trống.
Như vậy dòng số 10, 66 và 87 là những dòng mà ô V1 bị trống. Tương tự chúng ta có thể kiểm tra V3.
Các thủ thuật xử lý ô dữ liệu trốngVề căn bản, có hai cách để các bạn xử lý dữ liệu trống trong bảng. Một là các bạn có thể loại bỏ hoàn toàn dòng có chứa ô trống nếu như số lượng dòng bị loại bỏ không đáng kể so với tổng lượng dữ liệu mà các bạn có. Hai là điền vào ô trống với một giá trị nào đó, chẳng hạn như Mean, Median, hoặc một giá trị cố định. Với dữ liệu kiểu TimeSeries, các thủ thuật phổ biến hơn là dùng giá trị ô liền kề (backfill, forwardfill), giá trị trung bình trong khoảng thời gian nào đó (rolling average), hoặc giá trị trung bình của hai ô gần nhất (interpolation). Trong bài viết này, chúng ta sẽ tạm bỏ qua các thủ thuật liên quan đến TimeSeries vì đây là một chủ đề chuyên sâu hơn mà chúng ta sẽ bàn đến trong một bài viết khác. Một số kỹ thuật cao cấp hơn sử dụng Regression để suy ra giá trị ô trống từ giá trị của các dòng khác nhưng chúng ta cũng sẽ dành riêng chủ đề này trong một bài viết khác. Loại bỏ dòng chứa ô trốngĐầu tiên chúng ta cần đếm xem có bao nhiêu dòng chứa đầy đủ dữ liệu.
Như vậy có 83 dòng chứa đầy đủ dữ liệu (không có ô trống nào). Nếu chọn phương thức loại bỏ, tỷ lệ sẽ là Để trích xuất những dòng chứa đầy đủ dữ liệu, các bạn dùng đoạn code sau.
Sau khi trích xuất, DataFrame này có 83 dòng và không có ô nào bị trống. Nếu bạn tò mò muốn trích xuất riêng nhưng dòng không chứa đầy đủ để kiểm tra, thì chỉ cần đảo ngược điều kiện filter.
Đây là 17 dòng có ít nhất một ô trống. Tương tự bạn có thể kiểm tra thêm bằng hàm info().
Điền vào ô trốngĐể điền vào ô trống với một giá trị cố định nào đó, bạn có thể dùng hàm fillna(). Đầu tiên bạn phải khai báo các giá trị muốn điền vào mỗi cột.
Với cột đầu tiên chứa họ tên, chúng ta sẽ thay các ô trống bằng từ ‘Unknown’. Các ô trống trong cột thứ hai sẽ được thay bằng giá trị 0.0. Đôi
với cột V3, các ô trống sẽ được thay thế bằng giá trị trung bình (Mean) của toàn cột. Hàm nanmean() trong trường hợp này sẽ bỏ qua các ô trống trong công thức tính trung bình. Tương tự với cột V4, chúng ta sử dụng nanmedian, tức giá trị Median bỏ qua các ô trống. Dưới đây là giá trị cụ thể được thay thế vào từng cột.
Bây giờ chúng ta sẽ sử dụng các giá trị trên đên thay thế ô trống trong bảng dữ liệu. Các bạn hãy để ý dòng đầu tiên (0) và dòng số 3 của bảng trước và sau khi thay thế.
Với dòng đầu tiên, giá trị NaN tại V4 đã được thay bằng 57.08 đúng như chúng ta khai báo từ trước. Dòng số 3, giá trị NaN tại V2 và V3 được thay thế lần lượt bằng 0.0 và 10.49. Kiểm tra lại bằng hàm info().
Các bạn sẽ thấy hiện tại không còn ô trống nào trong bảng. Như vậy chúng ta đã hoàn tất xử lý các ô dữ liệu trống và sẵn sàng dùng dữ liệu này để train model. |