当前位置:首页 > Python > 正文

Python文件数据清洗完整教程 - 高效处理脏数据的实用方法 | Python数据分析

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或分块处理技术处理内存不足问题

总结

数据清洗是数据分析流程中不可或缺的环节。通过本教程,您已经掌握了:

  1. 使用Pandas库高效读取各种文件格式
  2. 识别和处理缺失值的多种方法
  3. 检测和删除重复数据
  4. 识别和处理异常值的统计方法
  5. 标准化数据格式的技巧
  6. 保存清洗后数据的最佳实践

高效的数据清洗不仅能提高分析结果的准确性,还能显著提升后续建模工作的效率。

发表评论