数据分析(数据清洗)

Python 数据分析 07:数据清洗 ------ 我的思路自述

目标:把原始表里的缺失值、重复值、异常值、格式问题逐一收拾干净。

先上代码

import pandas as pd

pd.set_option('display.min_rows', 30) # 默认显示10行,调成30行方便核对

1. 读取数据

df = pd.read_csv('data/sales.csv')

var1 = df

2.1 缺失值处理

var2 = df.isnull() # 查找哪些单元格缺失

var3 = df.dropna() # 删除含缺失值的行

var4 = df.dropna(axis=1) # 删除含缺失值的列

var5 = df.fillna('上海') # 用指定值填充

var6 = df.ffill() # 用上一行填充

var7 = df.bfill() # 用下一行填充

2.2 重复值处理

var8 = df.duplicated() # 所有列都相同才算重复

var9 = df.duplicated(subset='订单号') # 指定列重复即算重复

var11 = df.drop_duplicates(subset='订单号', keep='first') # 按订单号去重,保留第一条

2.3 异常值处理

var12 = dfdf\['单价' < 0] # 查看单价为负的异常行

var13 = df.drop(dfdf\['单价' < 0].index) # 删除这些异常行

df'单价' = df'单价'.abs() # 或修复:取绝对值把负数掰正

2.4 数据格式处理

方法一:仅改单一具体值,不推荐

df'订单日期' = df'订单日期'.replace('2025/06/02', '2025-06-02')

方法二:整列统一替换,推荐

df'订单日期' = df'订单日期'.str.replace('/', '-')

df

我的思路:真实数据很脏,清洗就是"四类体检"

过滤是"挑好的",清洗是"治病的"。我按四种脏数据对症下药,每类都是先查后治。

第一类·缺失值。 先 df.isnull() 看哪儿有空。治法分两派:删或填。dropna() 默认删含空值的整行,加 axis=1 变删列------这里我差点翻车,drop 和 dropna 是两个东西,删缺失值得用 dropna(df.drop(axis=1) 不给列名会直接报错)。填则是 fillna('上海') 统一填指定值,或 ffill() 用上一行、bfill() 用下一行填。

第二类·重复值。 duplicated() 默认要所有列都一模一样才算重,我常用 subset=['订单号'] 只按某列判重。治用 drop_duplicates(subset=['订单号'], keep='first'),keep 决定留第一条、留最后一条还是全不留。

第三类·异常值。 单价出现负数明显不对,df[df['单价'] < 0] 先揪出来看。处理两条路:删------df.drop(df[...].index) 先筛坏行再按索引 drop;修------.abs() 取绝对值把负数掰正,数据量不丢。

第四类·格式。 日期有人写斜杠有人写横杠。replace('2025/06/02',...) 只能改这一个具体值、不通用;正解是 str.replace('/','-') 整列一次性替换,这才是批量清洗该用的。

相关推荐
一条泥憨鱼1 小时前
【计算机网络】| 详解链路层:MAC 地址与VLAN
网络·学习·计算机网络
小小张说故事1 小时前
Python 的 True + True 为什么等于 2?bool 是 int 子类,这个设计坑了多少人
python
神仙别闹2 小时前
基于Python实现自动化测试作业—图像增广方案
图像处理·python·计算机视觉
坊钰2 小时前
【LangGraph框架入门级】12. 人机交互:interrupt 中断与 Command 恢复
开发语言·数据库·python·人机交互·ai编程·langgraph
燕落南枝2 小时前
C 语言学习大总结:从入门到进阶的完整知识体系
服务器·c语言·学习
科技林总2 小时前
从零开始学习DeerFlow完整路径
学习
把我格子衫拿来2 小时前
四元数为什么突然变号?旋转表示、SLERP 与位姿插值避坑
python·机器人·坐标变换·四元数·slerp
David猪大卫2 小时前
【C++修炼】STL容器—模板进阶:非类型模板参数、模板特化、模板分离编译
c语言·开发语言·c++·经验分享·笔记·学习·面试