
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 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.