上一篇
Python文件数据清洗完整教程 - 高效处理脏数据的实用方法 | Python数据分析
- Python
- 2025-07-31
- 1240
Python文件数据清洗完整教程
数据清洗是数据分析中至关重要的步骤,通常占整个数据分析流程60%以上的时间。本教程将介绍使用Python的Pandas库高效清洗文件数据的实用方法,包括处理缺失值、重复数据、异常值和格式转换等。
为什么需要数据清洗?
现实世界中的数据往往存在各种问题:
- 缺失值(NaN或空值)
- 重复记录
- 不一致的格式(日期、数字等)
- 异常值或错误数据
- 不一致的大小写或拼写
- 不相关的列或行
清洗后的数据能确保分析结果的准确性,提高模型性能,并减少后续处理中的错误。
完整数据清洗流程
1. 导入数据
使用Pandas读取不同格式的文件:
import pandas as pd
# 读取CSV文件
df = pd.read_csv('sales_data.csv')
# 读取Excel文件
df = pd.read_excel('sales_data.xlsx')
# 查看前5行数据
print(df.head())
2. 探索性数据分析
了解数据的基本情况:
# 查看数据基本信息
print(df.info())
# 描述性统计
print(df.describe())
# 检查缺失值
print(df.isnull().sum())
3. 处理缺失值
常用处理方法:
# 删除包含缺失值的行
df_cleaned = df.dropna()
# 用均值填充数值列缺失值
df['price'].fillna(df['price'].mean(), inplace=True)
# 用众数填充分类列缺失值
df['category'].fillna(df['category'].mode()[0], inplace=True)
# 向前填充
df.fillna(method='ffill', inplace=True)
4. 处理重复数据
# 检查重复行
print(f"发现重复行: {df.duplicated().sum()}")
# 删除完全重复的行
df.drop_duplicates(inplace=True)
# 基于特定列删除重复值
df.drop_duplicates(subset=['order_id'], keep='last', inplace=True)
5. 处理异常值
识别和处理异常值:
# 使用IQR方法识别异常值
Q1 = df['price'].quantile(0.25)
Q3 = df['price'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 过滤掉异常值
df = df[(df['price'] >= lower_bound) & (df['price'] <= upper_bound)]
# 使用Z-score方法
from scipy import stats
import numpy as np
z_scores = np.abs(stats.zscore(df['price']))
df = df[(z_scores < 3)]
6. 数据格式标准化
统一数据格式:
# 转换日期格式
df['order_date'] = pd.to_datetime(df['order_date'], format='%d/%m/%Y')
# 转换字符串格式
df['product_name'] = df['product_name'].str.title()
# 转换数值类型
df['quantity'] = pd.to_numeric(df['quantity'], errors='coerce')
# 创建类别数据类型
df['category'] = df['category'].astype('category')
7. 保存清洗后的数据
# 保存为CSV文件
df.to_csv('cleaned_sales_data.csv', index=False)
# 保存为Excel文件
df.to_excel('cleaned_sales_data.xlsx', index=False)
完整数据清洗示例
以下是一个整合所有步骤的完整示例:
import pandas as pd
import numpy as np
def clean_data(input_file, output_file):
# 读取数据
df = pd.read_csv(input_file)
# 处理缺失值
df['price'].fillna(df['price'].median(), inplace=True)
df['category'].fillna('Unknown', inplace=True)
# 删除重复行
df.drop_duplicates(inplace=True)
# 处理异常值
Q1 = df['price'].quantile(0.25)
Q3 = df['price'].quantile(0.75)
IQR = Q3 - Q1
df = df[(df['price'] >= Q1 - 1.5*IQR) & (df['price'] <= Q3 + 1.5*IQR)]
# 数据格式标准化
df['order_date'] = pd.to_datetime(df['order_date'], errors='coerce')
df['product'] = df['product'].str.title()
# 删除不必要的列
df.drop(columns=['temp_column'], inplace=True, errors='ignore')
# 保存清洗后的数据
df.to_csv(output_file, index=False)
print(f"数据清洗完成!清洗后数据已保存至: {output_file}")
# 使用示例
clean_data('dirty_data.csv', 'cleaned_data.csv')
最佳实践与技巧
- 保留原始数据:始终保留原始数据文件,在副本上进行清洗操作
- 分步验证:在每个清洗步骤后检查数据变化
- 自动化流程:将清洗过程封装为函数或脚本以便复用
- 文档记录:记录所有清洗决策和原因
- 处理大型数据集:使用
dask
或分块处理技术处理内存不足问题
总结
数据清洗是数据分析流程中不可或缺的环节。通过本教程,您已经掌握了:
- 使用Pandas库高效读取各种文件格式
- 识别和处理缺失值的多种方法
- 检测和删除重复数据
- 识别和处理异常值的统计方法
- 标准化数据格式的技巧
- 保存清洗后数据的最佳实践
高效的数据清洗不仅能提高分析结果的准确性,还能显著提升后续建模工作的效率。
本文由NingRanChao于2025-07-31发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20256950.html
发表评论