def missing_delete_var(df, threshold=None):"""df:数据集threshold:缺失率删除的阈值return :删除缺失后的数据集"""df2 = df.copy()missing_df = missing_cal(df)missing_col_num = missing_df[missing_df.missing_pct >= threshold].shape[0]missing_col = list(missing_df[missing_df.missing_pct >= threshold].col)df2 = df2.drop(missing_col, axis=1)return df2def missing_delete_user(df, threshold=None):"""df:数据集threshold:缺失个数删除的阈值return :删除缺失后的数据集"""df2 = df.copy()missing_series = df.isnull().sum(axis=1)missing_list = list(missing_series)missing_index_list = []for i, j in enumerate(missing_list):if j >= threshold:missing_index_list.append(i)df2 = df2[~(df2.index.isin(missing_index_list))]return df2def const_delete(df, col_list, threshold=None):"""df:数据集col_list:变量list集合threshold:同值化处理的阈值return :处理后的数据集"""df2 = df.copy()const_col = []for col in col_list:const_pct = df2[col].value_counts().iloc[0] / df2[df2[col].notnull()].shape[0]if const_pct >= threshold:const_col.append(col)df2 = df2.drop(const_col, axis=1)return df2def missing_cal(df):"""df :数据集return:每个变量的缺失率"""missing_series = df.isnull().sum() / df.shape[0]missing_df = pd.DataFrame(missing_series).reset_index()missing_df = missing_df.rename(columns={'index': 'col',0: 'missing_pct'})missing_df = missing_df.sort_values('missing_pct', ascending=False).reset_index(drop=True)return missing_dfdef data_processing(df, target):"""df:包含了label和特征的宽表return:df :清洗后的数据集"""# 特征缺失处理df = missing_delete_var(df, threshold=0.8)# 样本缺失处理df = missing_delete_user(df, threshold=int(df.shape[1] * 0.8))col_list = [x for x in df.columns if x != target]# 常变量处理df = const_delete(df, col_list, threshold=0.9)desc = df.describe().T# 剔除方差为0的特征std_0_col = list(desc[desc['std'] == 0].index)if len(std_0_col) > 0:df = df.drop(std_0_col, axis=1)df.reset_index(drop=True, inplace=True)# 缺失值计算和填充miss_df = missing_cal(df)cate_col = list(df.select_dtypes(include=['O']).columns)num_col = [x for x in list(df.select_dtypes(include=['int64', 'float64']).columns) if x != 'label']# 分类型特征填充cate_miss_col1 = [x for x in list(miss_df[miss_df.missing_pct > 0.05]['col']) if x in cate_col]cate_miss_col2 = [x for x in list(miss_df[miss_df.missing_pct <= 0.05]['col']) if x in cate_col]num_miss_col1 = [x for x in list(miss_df[miss_df.missing_pct > 0.05]['col']) if x in num_col]num_miss_col2 = [x for x in list(miss_df[miss_df.missing_pct <= 0.05]['col']) if x in num_col]for col in cate_miss_col1:df[col] = df[col].fillna('未知')for col in cate_miss_col2:df[col] = df[col].fillna(df[col].mode()[0])for col in num_miss_col1:df[col] = df[col].fillna(-999)for col in num_miss_col2:df[col] = df[col].fillna(df[col].median())return df, miss_df

  对数据分析、机器学习、数据科学、金融风控等感兴趣的小伙伴,需要数据集、代码、行业报告等各类学习资料,可添加微信:wu805686220(记得要备注喔!),也可关注微信公众号:风控圏子(别打错字,是圏子,不是圈子,算了直接复制吧!)

关注公众号后,可联系圈子助手加入如下社群:

  • 机器学习风控讨论群(微信群)
  • 反欺诈讨论群(微信群)
  • python学习交流群(微信群)
  • 研习社资料(qq群:102755159)(干货、资料、项目、代码、报告、课件)

相互学习,共同成长。

【数据处理】python数据清洗通用手法:缺失值处理相关推荐

  1. 数据清洗(二):python数据清洗

    python数据清洗 Pandas数据清洗流程: 1.数据的读写:read_csv.read_excel.to_csv to_excel 2.数据的探索与描述:info.head.describe.s ...

  2. Python数据清洗实战案例--拉勾招聘数据清洗

    Python数据清洗实战案例–拉勾招聘数据清洗 (本篇博客主要介绍个人对一份数据的清洗代码和清洗效果) 主要涉及应用的库是numpy.pandas.matplotlib,话不多说,直接上代码 #全部行 ...

  3. python数据清洗(excel表格)

    使用python数据清洗 第一步: 安装pandas模块 pip install pandas 第二步: 导入pandas模块 import pandas as pd 第三步: 读取excel表格 d ...

  4. Python分布式通用爬虫(4)

    Python分布式通用爬虫(4):处理并统一时间格式 划分.py文件部分 处理并统一时间格式 普通时间转换 代码展示 佛历时间转换 代码展示 缅甸语时间转换 代码展示 其他需要替换月份的时间转换 代码 ...

  5. python数据分析(三)——pandas缺失值处理

    系列文章目录: python数据分析(一)--series和读取外部数据 python数据分析(二)--DataFrame 缺失值处理 一.数据缺失 一.数据缺失 数据缺失通常有两种情况: 一种就是空 ...

  6. 海量数据处理-Python

    文章目录 海量数据处理-Python 海量数据处理的困难 大文件生成 空间受限 分块读取 文件拆分提取 拆分小文件 比较小文件 通过hash拆分文件 拆分小文件-依据hash 求取IP前TopK(还是 ...

  7. Python数据清洗:数据框列名大小写转换

    Python数据清洗:数据框列名大小写转换 Dataframe数据清洗:列名大小写转换 一行代码 Dataframe数据清洗:列名大小写转换 数据清洗:列名的大小写转换(便于merge数据框) 一行代 ...

  8. Python处理重复、缺失值

    Python处理重复.缺失值 使用Python处理数据的重复.缺失值 1 导入模块 先导入一些常用的模块 import numpy as np import pandas as pd import s ...

  9. python数据清洗实战入门笔记(五)数据统计

    数据清洗之数据统计 数据分组方法 练习 1.1在线杂货店订单数据 1.2 数据分组运算 聚合函数使用 练习 分组对象与apply函数 练习 透视图与交叉表 练习 数据集地址: https://pan. ...

最新文章

  1. Golang Study 一 定时器使用
  2. win7查看隐藏文件_隐藏在电脑里の秘密,放在你眼前,你也发现不了,就是这么奥给力...
  3. 把男朋友变成儿子你只需要一秒
  4. boost序列化(Serialization)
  5. UOJ#218. 【UNR #1】火车管理 线段树 主席树
  6. 【BZOJ3759】【cogs1603】饥饿游戏,博弈
  7. 中对缺失数据的预处理_数据预处理也有套路的
  8. 远程登录(Telnet)的配置
  9. linux开源监控工具,十款开源免费监控软件
  10. 新手做国外广告联盟lead常用工具汇总!
  11. 通过Windows制作安装U盘安装Chromium os
  12. android上的sip软电话
  13. 摄氏温度和华氏温度相互转换(及其概念)
  14. java解析project mpp文件_Java利用mpxj解析mpp格式文件
  15. 百度开晕,中国免费电商模式成定局
  16. 字幕时间轴制作(2)
  17. 非专业python学多久_非的解释|非的意思|汉典“非”字的基本解释
  18. xshell和xftp免费使用方法
  19. Gif录制工具--Mac篇
  20. 7-2 愿天下有情人都是失散多年的兄妹

热门文章

  1. python解密md5值_Python之POST提交解密MD5
  2. nginx linux脚本,shell脚本之nginx自动化脚本
  3. 表格某一列不固定其余全固定_如何利用Python一键拆分表格并进行邮件发送~
  4. apache2.2配置php,PHP5+APACHE2.2配置_PHP教程
  5. bootstrap 点击加号 表格_bootstrap中的输入组按钮,点击加号加1,减1子
  6. NB-IOT环境监测项目需求分析
  7. C++中的静态成员变量
  8. python与数学的故事_我与数学的故事作文800字
  9. oracle db file sequential read,db file sequential read等待事件
  10. 有负权重边的图可以有拉普拉斯矩阵吗?