pandas数据清洗(缺失值、异常值和重复值处理)
1. 缺失值处理
处理方式:
- 直接删除
- 填充缺失值
- 真值转换法
- 不处理 ( 数据分析和建模应用中很多模型对于缺失值有容忍度或灵活的处理方法,因此在预处理阶段可以不做处理。常见的能够自动处理缺失值的模型包括:KNN、决策树和随机森林、神经网络和朴素贝叶斯 )
pandas中用到的的api:
- dataframe.isnull() #判断是否有缺失值
- dataframe.dropna() #删除缺失值
- dataframe.fillna()#填充缺失值
示例代码:
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
# 生成一份缺失数据
# 生成一份数据
df = pd.DataFrame(np.random.randn(6, 4), columns=['col1', 'col2', 'col3', 'col4'])
# 增加缺失值
df.iloc[1:2, 1] = np.NAN
df.iloc[4, 3] = np.nan # 上面两种写法都行
df
# 查看是否有缺失值
df.isnull()
# 获取含有NAN的列
nan_col1 = df.isnull().any()
# 获取全部为NAN的列
nan_col2 = df.isnull().all()
print(nan_col1)
print(nan_col2)
# 直接删除含有NaN的行的记录
df2 = df.dropna()
df2
#使用sklearn填充缺失值
nan_model = SimpleImputer(missing_values=np.nan, strategy='mean') # 建立替换规则:将值为NaN的缺失值以均值做替换
nan_result = nan_model.fit_transform(df) # 应用模型规则
nan_result
# 使用pandas填充缺失值
nan_result_pd1 = df.fillna(method='backfill') # 用后面的值替换缺失值
nan_result_pd1
# 使用pandas填充缺失值
nan_result_pd2 = df.fillna(method='bfill', limit=1) # 用后面的值替代缺失值,限制每列只能替代一个缺失值
nan_result_pd2
# 使用pandas填充缺失值
nan_result_pd3 = df.fillna(method='pad') # 用前面的值替换缺失值
nan_result_pd3
# 使用pandas填充缺失值
nan_result_pd4 = df.fillna(0) # 用0替换缺失值
nan_result_pd4
# 使用pandas填充缺失值
nan_result_pd5 = df.fillna({'col2': 1.1, 'col4': 1.2}) # 用不同值替换不同列的缺失值
nan_result_pd5
# 使用pandas填充缺失值
nan_result_pd6 = df.fillna(df.mean()['col2':'col4']) # 用平均数代替,选择各自列的均值替换缺失值
nan_result_pd6
nan_result_pd6 = df.fillna(df.mean()) # 用平均数代替,选择各自列的均值替换缺失值
nan_result_pd6
2. 异常值处理
处理方式:
- 保留
- 删除
- 用统计量或预测量进行替换d
pandas中用到的api:
- dataframe.mean() #计算平局值
- dataframe.std() #计算标准差
示例代码:
import pandas as pd# 生成异常数据
df = pd.DataFrame({'col1': [1, 120, 3, 5, 2, 12, 13],'col2': [12, 17, 31, 53, 22, 32, 43]})
df
# 通过Z-Score方法判断异常值
df_zscore = df.copy() # 复制一个用来存储Z-score得分的数据框
cols = df.columns # 获得列表框的列名
for col in cols:df_col = df[col] # 得到每一列的值z_score = (df_col - df_col.mean()) / df_col.std() # 计算每一列的Z-score得分df_zscore[col] = z_score.abs() > 2.2 # 判断Z-score得分是否大于2.2,如果是则是True,否则为False
df_zscore
# 删除异常值所在的行
df_drop_outlier = df[df_zscore['col1'] == False]
df_drop_outlier
3. 数据去重
pandas中用到的api:
- dataframe.duplicated() # 判断重复数据记录
- dataframe.drop_duplicates() # 删除数据记录中所有列值相同的记录
示例代码:
import pandas as pd # 导入pandas库
# 生成重复数据
data1, data2, data3, data4 = ['a', 3], ['b', 2], ['a', 3], ['c', 2]
df = pd.DataFrame([data1, data2, data3, data4], columns=['col1', 'col2'])
df
# 判断重复数据
isDuplicated = df.duplicated() # 判断重复数据记录
isDuplicated
# 删除重复值
# 删除数据记录中所有列值相同的记录
df1 = df.drop_duplicates()
df1
# 删除数据记录中col1值相同的记录
df2 = df.drop_duplicates(['col1'])
df2
# 删除数据记录中col2值相同的记录
df3 = df.drop_duplicates(['col2'])
df3
# 除数据记录中指定列(col1/col2)值相同的记录
df4 = df.drop_duplicates(['col1', 'col2'])
df4
pandas数据清洗(缺失值、异常值和重复值处理)相关推荐
- 一文看懂数据清洗:缺失值、异常值和重复值的处理
https://www.toutiao.com/a6711212131125035534/ 导读:在数据清洗过程中,主要处理的是缺失值.异常值和重复值.所谓清洗,是对数据集通过丢弃.填充.替换.去重等 ...
- 机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)
机器学习之数据预处理--数据清洗缺失值.异常值和重复值的处理 基础知识 技术点总结 数据列缺失的处理方法 1.丢弃(缺失值处理) 1.生成一份随机数据 2.查看哪些值缺失 3.获得含有NA的列 4.获 ...
- 数据清洗 - 缺失值,异常值,重复值处理
数据清洗 数据清洗的对象就是缺失值,重复值,异常值 一 重复值的处理一般用删除法,但是在业务上有意义的重复值不能删除import numpy as np import pandas as pd imp ...
- 数据清洗:缺失值,异常值和重复值的处理
在数据清洗过程中,主要处理的是缺失值,异常值和重复值.所谓清洗,是对数据进行丢弃,填充,替换,去重等操作,实现去除异常,纠正错误,补足缺失的目的. 1. 数据列缺失的4种处理方法 数据缺失分为2种 ...
- [Python] 数据预处理(缺失值、异常值、重复值) [相关方法参数说明、代码示例、相关概念]
前言 系列文章目录 [Python]目录 视频及资料和课件 链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234 提取码:1234 文 ...
- pandas笔记(3)——DataFrame数据查看,缺失值,异常值,重复值预处理
数据情况查看 预览数据前n行 Python中预览数据可以使用head()函数,该函数默认展示前5行. # 查看数据前2行 df.head(2) 查看数据末尾n行 可以使用tail()函数,查看数据末尾 ...
- 一文看懂数据清洗:缺失值、异常值和重复值的处理
01 数据列缺失的4种处理方法 数据缺失分为两种:一种是行记录的缺失,这种情况又称数据记录丢失:另一种是数据列值的缺失,即由于各种原因导致的数据记录中某些列的值空缺. 不同的数据存储和环境中对于缺失 ...
- Pandas数据分析17——pandas数据清洗(缺失值、重复值处理)
参考书目:<深入浅出Pandas:利用Python进行数据处理与分析> pandas对大数据有很多便捷的清洗用法,尤其针对缺失值和重复值.缺失值就不用说了,会影响计算,重复值有时候可能并未 ...
- python处理csv中的缺失值_Python中重复值、缺失值、空格值处理
1.重复值处理 把数据结构中,行相同的数据只保留一行. 函数语法: drop_duplicates() 删除重复值newdf=df.drop_duplicates()from pandas impor ...
最新文章
- Python 网络爬虫笔记3 -- Beautiful Soup库
- broker可以禁用吗 time_RuntimeBroker是什么进程,能禁用RuntimeBroker.exe进程么?
- Java编程之URI
- python mssql 报表_Python从mssql向SQLite插入表
- ubuntu16.04安装metasploit+postgresql
- Django ORM 常用的查询方法
- ORACLE表、表分区、表空间的区别
- Add NIC to Openfiler 2.3
- Eolinker——前置用例返回的reponse值进行传递
- java解压zip异常_zip 文件解压缩问题解决 java.util.zip.ZipException:error in opening zip file | 学步园...
- 基于SSM的小区报修系统
- 【优化预测】基于matlab粒子群算法优化SVM回归预测(多输入多输出)【含Matlab源码 1421期】
- [C#]六十甲子纳音WM版 v2.1 By:LESLIE
- 机器学习之初识SVM
- PDF怎么在线免费转换成WORD,亲测可用
- 【Android】小白进阶之回调监听机制listener
- 2020年9月电子学会Python等级考试试卷(三级)考题解析
- 天高任鸟飞,在你还苦闷Android出路时,总有人在系统钻研为高级开发做准备
- 一次性剪辑多个视频,在视频背景添加相同图片
- HTML中alt标签的用法
热门文章
- 智能交通:影响人类未来10-40年的重大变革
- 2021 IDEA大会开启AI思想盛宴,用“创业精神”做科研
- 超硬核全套Java视频教程(学习路线+免费视频+配套资料)
- 微软全球副总裁洪小文:应对数字化转型挑战,跨界共创正当时
- 如何记录2秒内实现1800度转体+翻腾,百度智能云黑科技教你看懂跳水
- 维度爆炸?Python实现数据压缩如此简单
- NLP带来的“科幻感”超乎你的想象 - ACL2020论文解读
- 脑出血遇到深度学习,是否可以无所遁形?
- 掌声送给TensorFlow 2.0!用Keras搭建一个CNN | 入门教程
- 免费 | 程序员如何在面试中避免被坑?今晚告诉你!