Bỏ qua tới nội dung chính
Quay lại tin tức

Cách làm sạch các tệp CSV lộn xộn bằng Python: Hướng dẫn cho người mới bắt đầu

KDnuggets· Abid Ali Awan· 8/7/2026general

Tìm hiểu cách làm sạch các tệp CSV bằng thư viện pandas thông qua việc xử lý các giá trị bị thiếu, các hàng trùng lặp, văn bản lộn xộn, kiểu dữ liệu sai, định dạng ngày tháng hỗn hợp, email không hợp lệ và các giá trị tiền tệ.

Cách làm sạch các tệp CSV lộn xộn bằng Python: Hướng dẫn cho người mới bắt đầu - KDnuggets Blog Bài viết hàng đầu Giới thiệu Chủ đề AI Lời khuyên nghề nghiệp Thị giác máy tính Kỹ thuật dữ liệu Khoa học dữ liệu Mô hình ngôn ngữ Học máy MLOps NLP Lập trình Python SQL Bộ dữ liệu Sự kiện Tài nguyên Bảng tóm tắt Đề xuất Tóm tắt công nghệ Quảng cáo Tham gia Bản tin Cách làm sạch các tệp CSV lộn xộn bằng Python: Hướng dẫn cho người mới bắt đầu Tìm hiểu cách làm sạch các tệp CSV bằng pandas bằng cách xử lý các giá trị bị thiếu, các hàng trùng lặp, văn bản lộn xộn, kiểu dữ liệu sai, định dạng ngày tháng hỗn hợp, email không hợp lệ và giá trị tiền tệ. Bởi Abid Ali Awan, Trợ lý Biên tập viên KDnuggets vào ngày 8/7/2026 trong Python # Giới thiệu Khi mới bắt đầu phân tích dữ liệu, một trong những điều đầu tiên cần học là cách làm sạch một tập dữ liệu. Nghe có vẻ cơ bản, nhưng đây là một trong những kỹ năng quan trọng nhất sẽ được sử dụng lặp đi lặp lại. Điều thú vị là ngay cả khi là một chuyên gia, vẫn sẽ dành nhiều thời gian để làm sạch dữ liệu thay vì phân tích, xây dựng mô hình hoặc đánh giá kết quả. Tại sao? Bởi vì dữ liệu thô hiếm khi sạch. Nó có thể có các giá trị bị thiếu, định dạng sai, các hàng trùng lặp, chuỗi lộn xộn, ngày tháng không hợp lệ, các danh mục lạ và các mục nhiễu. Trước khi có thể hiểu dữ liệu đang nói gì, cần phải khắc phục những vấn đề này. Trong hướng dẫn này, chúng ta sẽ làm sạch một tệp CSV khách hàng lộn xộn bằng Python và pandas. Chúng ta sẽ bắt đầu bằng cách tải và kiểm tra dữ liệu, sau đó làm sạch tên cột, xử lý các giá trị bị thiếu, loại bỏ các bản sao, chuẩn hóa văn bản, chuyển đổi kiểu dữ liệu, xác thực email và lưu tệp CSV sạch cuối cùng. # 1. Tải CSV Bước đầu tiên là tải tập dữ liệu lộn xộn vào pandas. import pandas as pd df = pd.read_csv("messy_customers.csv", keep_default_na=False) df Chúng ta đang sử dụng một tệp CSV khách hàng có các vấn đề chất lượng dữ liệu phổ biến. Như đã thấy, tệp bao gồm tên cột lộn xộn, định dạng văn bản không nhất quán, định dạng ngày tháng hỗn hợp, các giá trị bị thiếu, các hàng trùng lặp và các số được lưu trữ dưới dạng văn bản. # 2. Kiểm tra trước khi làm sạch Trước khi bắt đầu làm sạch, chúng ta cần hiểu thực sự có gì bên trong tập dữ liệu. print("Shape:", df.shape) print("\nColumn names:") print(df.columns.tolist()) print("\nData types:") print(df.dtypes) print("\nExact duplicate rows:", df.duplicated().sum()) Đầu ra: Shape: (10, 8) Column names: [' Customer ID ', ' Full Name ', 'AGE', ' Email Address ', 'Join Date', 'City', 'Membership', 'Total Spend'] Data types: Customer ID object Full Name object AGE object Email Address object Join Date object City object Membership object Total Spend object dtype: object Exact duplicate rows: 1 Điều này cung cấp một cái nhìn tổng quan nhanh về tập dữ liệu trước khi thực hiện bất kỳ thay đổi nào. Chúng ta có thể thấy rằng tập dữ liệu có 10 hàng và 8 cột. Tên cột lộn xộn vì một số trong số chúng có thêm khoảng trắng và cách viết hoa không nhất quán. Chúng ta cũng có thể thấy rằng mọi cột được lưu trữ dưới dạng object, điều này thường có nghĩa là pandas đang coi chúng là văn bản. Kiểm tra trùng lặp cũng cho thấy có 1 hàng trùng lặp chính xác. Điều này hữu ích để biết sớm vì các bản ghi trùng lặp có thể ảnh hưởng đến phân tích cuối cùng. # 3. Làm sạch tên cột Sau khi xác định các tên cột không đồng nhất, chúng tôi sẽ tiến hành làm sạch chúng. df.columns = ( df.columns .str.strip() .str.lower() .str.replace(r"\s+", "_", regex=True) ) df.columns.tolist() Kết quả: ['customer_id', 'full_name', 'age', 'email_address', 'join_date', 'city', 'membership', 'total_spend'] Bước này loại bỏ các khoảng trắng thừa khỏi tên cột, chuyển đổi tất cả thành chữ thường và thay thế khoảng trắng bằng dấu gạch dưới. Hiện tại, tên cột đã dễ thao tác hơn nhiều. Thay vì viết các tên có khoảng trắng như Email Address, chúng ta có thể đơn giản sử dụng email_address. Điều này giúp mã nguồn rõ ràng hơn và tránh các lỗi nhỏ sau này. # 4. Thay thế chuỗi trống và giá trị giữ chỗ Tiếp theo, chúng tôi sẽ thay thế các giá trị trống và các giá trị giữ chỗ phổ biến bằng các giá trị thiếu thích hợp. df = df.replace(r"^\s*$", pd.NA, regex=True) df = df.replace( ["N/A", "n/a", "NA", "unknown", "not a date"], pd.NA, ) df.isna().sum() Kết quả: customer_id 1 full_name 1 age 1 email_address 0 join_date 1 city 2 membership 1 total_spend 1 dtype: int64 Các tệp CSV trong thực tế thường hiển thị dữ liệu thiếu theo nhiều cách khác nhau. Một số ô trống, một số sử dụng N/A, và một số sử dụng các giá trị như unknown hoặc not a date. Chúng tôi chuyển đổi tất cả các giá trị này thành các giá trị thiếu thích hợp để pandas có thể phát hiện chúng một cách chính xác. Sau bước này, việc đếm, điền hoặc loại bỏ các giá trị thiếu sẽ dễ dàng hơn. # 5. Loại bỏ các hàng trùng lặp Bây giờ chúng tôi sẽ loại bỏ các hàng trùng lặp chính xác khỏi tập dữ liệu. print("Số hàng trước:", len(df)) df = df.drop_duplicates().copy() print("Số hàng sau:", len(df)) Kết quả: Số hàng trước: 10 Số hàng sau: 9 Các hàng trùng lặp có thể gây ra vấn đề trong phân tích do cùng một bản ghi có thể được tính nhiều lần. Ở đây, chúng tôi có 10 hàng trước khi loại bỏ các bản sao và 9 hàng sau đó. Điều này có nghĩa là một hàng trùng lặp chính xác đã được loại bỏ khỏi tập dữ liệu. # 6. Làm sạch các cột văn bản Bây giờ chúng tôi sẽ làm sạch các cột dựa trên văn bản để các giá trị nhất quán hơn. text_columns = ["customer_id", "full_name", "email_address", "city", "membership"] for column in text_columns: df[column] = df[column].astype("string").str.strip() df["full_name"] = ( df["full_name"] .str.replace(r"\s+", " ", regex=True) .str.title() ) df["city"] = df["city"].str.title() df["membership"] = df["membership"].str.lower() df["email_address"] = df["email_address"].str.lower() df[text_columns] Các cột văn bản thường cần được làm sạch thêm vì người dùng có thể nhập cùng một loại thông tin theo nhiều cách khác nhau.

Nguồn tin: KDnuggets — Tác giả: Abid Ali Awan. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.