三步搞定杂乱数据集,新手也能快速上手 怎么处理数据集的缺陷
我是茉莉,一个喜欢用大白话分享生活窍门的程序员,每天不是在清理数据,就是在琢磨怎么用最简单的方法把乱糟糟的Excel表格收拾干净,今天手把手教你数据处理的底层逻辑,保证看完就能用上。
先给数据"洗个澡"(关键步骤)
1、处理缺失值就像收拾乱丢的袜子
我刚接手数据分析时,最怕遇到表格里这儿空一格那儿缺一行,后来发现用Python三行代码就能解决:
print(df.isnull().sum()) # 先数数有多少窟窿 df.dropna(inplace=True) # 直接扔掉带窟窿的行 df.fillna(df.mean(), inplace=True) # 或者用平均值填坑但要注意:医疗数据别随便填平均数,订单数据缺了金额直接删更安全,上周处理体检报告,有人身高填了2.8米,这种明显手误的用df[(df['身高']<200) & (df['身高']>50)]就能筛出来。
2、重复数据比衣柜里的旧衣服更烦人
最近处理3000条用户留言,发现有200多条完全重复的吐槽,用df.duplicated()找重复值时,记得配合subset参数指定关键列,就像整理发票时,只要发票号和金额相同就算重复,其他信息不同也不用管。
给数据"换衣服"(格式调整)
1、日期格式混乱得像不同时区的手表
上周处理跨国销售数据差点翻车,美国同事的日期是月/日/年,国内是年-月-日,后来统一用:
df['日期'] = pd.to_datetime(df['日期'], errors='coerce')加上errors='coerce'能把乱写的日期(比如2023-02-30)自动转成空值,比Excel智能多了。
2、文本数据要像垃圾分类
遇到"北京"、"北京市"、"BJ"混着写的情况,用replace函数批量替换:
df['城市'] = df['城市'].replace({'BJ':'北京', '上海市':'上海'})处理用户填写的性别栏时,我还用正则表达式把"male/男性/M"都统一成"男",代码比手动改快20倍。
数据"组装车间"(结构化处理)
1、合并表格像拼乐高
处理销售数据时经常要把订单表和客户信息表合并,用merge函数要注意how参数:
pd.merge(订单表, 客户表, how='left', on='客户ID')上周合并5个分公司报表时,发现concat和append的区别就像横向拼接和纵向堆叠,用错了会把单价和数量对不齐。
2、数据分组像整理工具箱
分析用户消费习惯时,groupby加上agg函数超好用:
df.groupby('用户ID').agg({ '订单金额':['sum','mean'], '下单时间':['min','max'] })这样能同时看到每个用户总消费、客单价、首末次下单时间,比Excel数据透视表灵活多了。
注意事项(血泪教训):
1、处理前务必复制原始文件,我有次误操作把客户手机号删了,幸好有备份
2、分类数据记得先转成category类型,能省80%内存
3、遇到百万行数据别用Excel,Pandas处理10万行数据比Excel快10倍
4、特征工程时别忘了处理量纲,比如把年龄和工资放在一起分析前要先归一化
最后送你三个私藏函数:
1、df.sample(5) 随机抽查5行,比从头看到尾高效
2、df.describe(include='all') 一键生成全表统计报告
3、df.to_csv('clean_data.csv', index=False) 保存成果时记得去掉没用的索引列
下次遇到日期和文本混在同一列的情况,记得试试pd.to_datetime()的骚操作,我是茉莉,下期教你用手机拍证件照自动抠图,保证比打印店便宜还好用。