Python数据清洗笔记(上)

一、数据清洗概述

数据清洗是数据分析过程中至关重要的一步,约占整个数据分析过程的60%-80%的时间。主要包括处理缺失值、异常值、重复值、格式不一致等问题。

二、常用工具

主要使用Python的Pandas库进行数据清洗:

import pandas as pd

import numpy as np

三、常见数据问题及处理方法

3.1缺失值处理

(1)创建示例数据

data = {'姓名': '张三', '李四', '王五', '赵六', None,

'年龄': 25, 30, None, 35, 40,

'工资': 5000, 6000, 5500, None, 7000}

df = pd.DataFrame(data)

(2) 查看缺失值

print(df.isnull().sum())

(3)处理方法

处理方法1:删除缺失行

df_drop = df.dropna()

print("删除缺失值后的数据:\n", df_drop)

处理方法2:填充缺失值

df_fill = df.fillna({'姓名': '未知', '年龄': df'年龄'.mean(), '工资': df'工资'.median()})

print("填充缺失值后的数据:\n", df_fill)

处理方法3:插值法

df'年龄' = df'年龄'.interpolate()

print("插值处理后的数据:\n", df)

3.2重复值处理

(1)创建含重复值的数据

data = {'姓名': '张三', '李四', '张三', '王五', '李四',

'年龄': 25, 30, 25, 35, 30,

'工资': 5000, 6000, 5000, 5500, 6000}

df = pd.DataFrame(data)

(2)检查重复值

print("重复值数量:", df.duplicated().sum())

(3)删除完全重复的行

df_drop_dup = df.drop_duplicates()

print("去重后的数据:\n", df_drop_dup)

(4)基于特定列删除重复值

df_drop_dup_name = df.drop_duplicates(subset='姓名')

print("基于姓名去重后的数据:\n", df_drop_dup_name)

3.3异常值处理

(1)创建含异常值的数据

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

data = {

'数学': 85, 90, 78, 92, 87, 130, 88, 95, 72, 150,

'物理': 72, 85, 90, 68, 82, 95, 78, 120, 65, 88,

'化学': 88, 92, 85, 78, 95, 102, 82, 78, 115, 90

}

df = pd.DataFrame(data)

(2)基于3σ原则定义函数

def sigma_rule_outliers(df):

outliers_mask = pd.DataFrame(index=df.index, columns=df.columns)

#创建一个与原始df具有相同索引和列名的空DataFrame,所有单元格值被填充为False

for col in df.columns:

mean = dfcol.mean()

std = dfcol.std()

lower = mean - 3*std

upper = mean + 3*std

outliers_maskcol = ~dfcol.between(lower, upper)

return outliers_mask

(3)基于箱线图定义函数(IQR方法)

def iqr_rule_outliers(df):

outliers_mask = pd.DataFrame(index=df.index, columns=df.columns)

for col in df.columns:

Q1 = dfcol.quantile(0.25)

Q3 = dfcol.quantile(0.75)

IQR = Q3 - Q1

lower = Q1 - 1.5*IQR

upper = Q3 + 1.5*IQR

outliers_maskcol = ~dfcol.between(lower, upper)

return outliers_mask

(4)检测并处理异常值

--检测异常值:

sigma_outliers = sigma_rule_outliers(df)

iqr_outliers = iqr_rule_outliers(df)

print("\n3σ原则检测到的异常值位置:")

print(sigma_outliers)

print("\n箱线图(IQR)方法检测到的异常值位置:")

print(iqr_outliers)

--处理异常值(替换为中位数):

def replace_outliers(df, outliers_mask):

df_clean = df.copy( )

for col in df.columns:

median = dfcol.median()

df_cleancol = df_cleancol.mask(outliers_maskcol, median)

return df_clean

使用3σ原则处理

df_sigma_clean = replace_outliers(df, sigma_outliers)

使用IQR方法处理

df_iqr_clean = replace_outliers(df, iqr_outliers)

print("\n3σ原则处理后的数据:")

print(df_sigma_clean)

print("\nIQR方法处理后的数据:")

print(df_iqr_clean)

(5)建议

数据分布接近正态时:优先使用3σ原则

数据分布未知或偏态时:使用IQR方法

重要决策时:两种方法结合使用,人工复核异常值

相关推荐
gwf216几秒前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
Iruoyaoxh11 分钟前
栈和队列~
java·开发语言
爱吃提升14 分钟前
python 分布式爬虫、爬虫合规与综合实战项目
分布式·爬虫·python
审小匠OpenCPAi15 分钟前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
撩得Android一次心动18 分钟前
Linux编程笔记3【个人用】
linux·笔记
Hrain-AI19 分钟前
2026 企业 AI 编程智能体实战:Codex 与 Claude Code
开发语言·人工智能·kotlin
wdfk_prog44 分钟前
嵌入式面试真题第 13 题:单硬件 Timer 下的高精度多路软件定时器架构设计
c语言·开发语言·面试·职场和发展·嵌入式
oort1231 小时前
吃上了自家的细糠,还挺丝滑,用起来手感还行,OortCloud发布新版AI编程平台,下载 OortCodex,Token多,免费薅
大数据·开发语言·人工智能·ai编程
slandarer1 小时前
MATLAB | 泰勒图绘制,支持各种角度范围
开发语言·数学建模·matlab·nature·顶刊·泰勒图
元Y亨H1 小时前
Pandas 解析 Excel 导致的内存溢出(MemoryError)
python·excel