一.导入模块

import pandas as pd
from scipy.interpolate import interp1d

二.读取excel文件

data=pd.read_excel(r'E:\pythonwork\数据分析\11.数据清洗\人事终表 (1).xlsx').tail(10)
print(data)
'''Unnamed: 0       部门        姓名    应发数   发放时间       绩效  合计工资
108         108  讲解员(6人)  张凤楚  3200.0  2020-07工资     NaN   NaN
109         109  讲解员(6人)   赵聪  3200.0  2020-07工资     NaN   NaN
110         110  讲解员(6人)  钱沫琪  3200.0  2020-07工资     NaN   NaN
111         111  讲解员(6人)  苗一萌  3200.0  2020-07工资     NaN   NaN
112         112  讲解员(6人)  韩小艺  3200.0  2020-07工资     NaN   NaN
113         113      NaN       孙晓娜     NaN        NaN    3420.0   NaN
114         114      NaN       王金英     NaN        NaN    3240.0   NaN
115         115      NaN        申洁     NaN        NaN     3600.0   NaN
116         116      NaN       郑开彦     NaN        NaN    3420.0   NaN
117         117      NaN       郭建萍     NaN        NaN    3420.0   NaN
'''

三.数据清洗

1.检测与处理缺失值

'''
isnull: 判断元素是空值的方法,如果是空值返回--True,否则--False
notnull: 判断元素不是空值的方法,如果不是空值返回--True,否则--False
'''
print(data.notnull())   # True/False
data1=data['绩效'].notnull().sum()   # ==> .count
print(data1)        # 5

2.处理空值的方法

(1).填充空值 data.fillna

data.fillna({'部门':'实习','应发数':0,'发放时间':'2020-07工资','绩效':0},limit=3,            # 限制修改条数,默认是Noneinplace=True        # 填充空值的方法)
data['合计工资']=data['应发数']+data['绩效']
# print(data)

(2)删除空值的方法 data.dropna

data2=data.dropna(axis=0,how='all',thresh=2,subset=['部门','姓名'],inplace=False)
# 1.how='any' 有空就删,how='all' 全为空才删
# 2.thresh=6  表示当空值数量<6,则删除
# 3.subset=[],表示删除行的情况可以根据列是否为空删除行
# 4.inplace=False 默认为False不修改原表

# data2=data.dropna(axis=0,how=‘any’)
# data2=data.dropna(axis=0,thresh=3) # thresh最大空值数量,大于就删
# data2=data.dropna(subset=[‘部门’,‘姓名’,‘应发数’],axis=0)
# print(data)
# print(data2)

3.插值法—处理缺失值的方法

(1)线性插值:

要求x,y之间满足线性关系: y=kx+b

# 科学计数法scipy
from scipy.interpolate import interp1d
x=np.array([0,1,2,3,5])
y=np.array([2,4,6,8,12])
Linear1=interp1d(x,y,kind='linear')   # linear 拟合线性函数,只能在当前x的范围内插值
print(Linear1([2.235]))      # [6.47]

(2) 多项式插值的方法 (非线性方程y=2*(x+1)2):

利用已知的值,拟合一个多项式:

'''拉格朗日插值,牛顿插值'''
from scipy.interpolate import lagrange
x1=np.array([0,1,2,3,4,7,8,9])           # 也可以写成x1=[0,1,2,3,4,7,8,9]
y1=np.array([2,8,18,32,50,128,162,200])  # 也可以写成y1=[2,8,18,32,50,128,162,200]
Lag=lagrange(x1,y1)
print(Lag([5,6]))
'''总结:如果用非线性函数拟合线性数据是可以的,但是用线性函数拟合非线性数据是不行的,不会报错但值不正确'''

4.检测与处理重复值

(1) 记录重复

'''series: ser.drop_duplicates()  # 没有subset参数
dataframe: df.drop_duplicates(subset=['','']) 一般偶会传入subset,
根据subset中的键判断元素是否一致,如果一致,则数据重复--删除,如果不一致则保留'''
df=pd.DataFrame({'name':['lx','ss','ws','lx'],'id':[1,2,3,1],'age':[12,15,12,12]})
print(df)
df1=df.drop_duplicates(subset=(['name','id']),inplace=True)
print(df1)

(2).特征重复

'''特征重复要求:需要是连续数值型
通过相似度的方法,判断两列是否具有某种关系: (-1,1)
通过相识度去重: 这个方法只能处理数值型,不能处理类别型,
类别特征是无法通过相关系数来计算相识度的'''
data=pd.read_excel(r'E:\pythonwork\数据分析\7.panada的创建\meal_order_detail.xlsx')
data1=data[['counts','amounts']].corr(method='kendall')
# data1=data[['counts','amounts']].corr(method='spearman')
print(data1)

(3).哑变量处理:将类别型数据转换为数值型数据

'''稀疏矩阵--返回的数值类型是一个稀疏矩阵,one-hot编码'''
x=data['dishes_name'].head()
x1=pd.get_dummies(x)
print(x1)

(4)异常值的处理

'''1.什么是异常值?
异常值是指数据中心个别数值明显偏离其余数值的数据,也称为离群点,野值:
检测异常值就是监测数据中是否有录入错误以及是否有不合理的数据'''

‘’‘2. 3σ原则:[拉依达准则]
该法则就是假设一组检验数据只有随机误差,对原始数据进行计算处理得到标准差
按照一定的概率确定一个区间,人为误差超过这个区间就属于异常值
3σ原则仅适用于服从正态分布或者近似正态分布的数据
μ-3σ<x<μ+3σ,为正常区间的数据,此区间的概率值为0.9973’’’

‘’‘3.根据项目场景自定义阈值范围:’’’

min_mask=data['amounts']<data['amounts'].mean()-data['amounts'].std()
max_mask=data['amounts']>data['amounts'].mean()+data['amounts'].std()
mask=min_mask|max_mask
data1=data.loc[mask,'amounts'].head(10)
print(data1)

(5) 连续数据离散化

'''
分析一个问题时,某些特征是连续的,
eg:年龄; 儿童,青年,中年,老年
'''
1.等宽法 pd.cut(数据,bins)
# --- 尽力要求区间宽度一致的,但是落到每个区间内的频数就不能保证一致了
'''
用此方法更多的关注的是区间的宽度
参数说明:bins表示区间, 当bins=一个自然数时表示区间个数,等分区间; bins=列表时表示自定义分割区间
'''
# print(data['amounts'].describe())
da2=pd.cut(data['amounts'],bins=5).value_counts()
bins=[0,25,35,56,179]
da2=pd.cut(data['amounts'],bins=bins).value_counts()
print(da2)
2.等频法 pd.qcut
# --- 尽力使的数据能均匀的落到每个区间
'''
q=int,表示切割成几个区间
q=list,表示分位数,list=[0,0.25,0.5,0.75,1]/[0,0.3,0.6]
'''
da3=pd.qcut(data['amounts'],q=10).value_counts()
# print(da3)

python-数据分析-(12)pandas数据清洗、缺失值、重复值、异常值处理常见方法相关推荐

  1. python excel处理重复行并统计个数_懂Excel就能轻松入门Python数据分析包pandas(五):重复值处理...

    经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死.后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器-- pandas 前言 有时候数据中出 ...

  2. Pandas数据分析17——pandas数据清洗(缺失值、重复值处理)

    参考书目:<深入浅出Pandas:利用Python进行数据处理与分析> pandas对大数据有很多便捷的清洗用法,尤其针对缺失值和重复值.缺失值就不用说了,会影响计算,重复值有时候可能并未 ...

  3. Excel数据处理(缺失值/重复值/异常值/拆分)

    6月12日给大家讲解了一下数据获取的东东(时隔略久,忘记的请点击数据获取回顾),时隔一个月,接着我们的 用Excel进行数据分析系列 的第二篇:数据处理.文末有获取本篇实例数据的方法. 目录: 一.缺 ...

  4. python 数据分析day4 Pandas 之 DataFrame

    DataFrame 一. 创建DataFrame 1. 二维数组创建 2. 字典创建 3. JSON创建 4. 读取Excel或CSV文件创建 5. 读数据库(MySQL)创建 二. 常用属性 三. ...

  5. python常用命令汇总-python数据分析之pandas常用命令整理

    原标题:python数据分析之pandas常用命令整理 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型 ,提供了高效地 ...

  6. Python数据分析之Pandas库

    Python数据分析之Pandas库 一.Pandas简介 二.Pandas库的安装 三.Pandas的数据结构 四.Series 和 DataFrame 数据结构的使用 五.其他可以参考的网站 一. ...

  7. 去除html重复的元素 js,js数组中去除重复值的几种方法

    在日常开发中,我们可能会遇到将一个数组中里面的重复值去除,那么,我就将我自己所学习到的几种方法分享出来 去除数组重复值方法: 1,利用indexOf()方法去除 思路:创建一个新数组,然后循环要去重的 ...

  8. xlsx表格怎么筛选重复数据_excel表格如何筛选重复数据 在Excel表格的两列数据中提取不重复值的四种方法...

    excel表格如何筛选重复数据 在Excel表格的两列数据中提取不重复值的四种方法,最近到了季度汇报的时候,掌握一手excel技能在此刻显得多么重要,为了是你的excel看起来更高大上,今天教大家设置 ...

  9. python实现数据清洗(重复值+缺失值+异常值处理)

    实现功能: python实现数据清洗,对重复记录.缺失值.异常值进行检测,并对其进行处理. 实现代码: # 导入需要的库 import numpy as np import pandas as pdd ...

最新文章

  1. 通过外貌就能看出程序员的资历? | 每日趣闻
  2. C++操作Redis的简单例子
  3. HTML5 Web SQL数据库
  4. Windows Phone 7 开发 31 日谈——第22日:应用?还是 游戏?
  5. Java学科课程大纲
  6. 【clickhouse】clickhouse查询语句之simple
  7. 淘汰过时的工具也有错?微软的 Blazor 框架会是下一个 SilverLight?
  8. Android ImageView,使用Kotlin的ImageButton
  9. 用gcc3.4.5编译c++项目
  10. 2dpsk调制解调实验matlab_贼详细的8PSK调制与解调详细过程
  11. 恒凯USB数据采集卡在国产麒麟操作系统下的应用(一)环境设置、采集卡驱动安装及C语言采集应用
  12. 什么是功能性测试?-Alltesting|泽众云测试
  13. HTML 引用小图标
  14. 系统垃圾清理bat文件
  15. 消逝的光芒 Dying Light for Mac 跑酷僵尸游戏 动作生存游戏
  16. SpringBoot从入门到精通教程(三十)- 支付宝企业支付集成(五分钟集成)
  17. 正则表达式高级学习技巧
  18. Word处理控件Aspose.Words功能演示:使用 Java 将 Word 文档转换为 Markdown
  19. 让你的桌面腾飞吧(OpenSolaris2008.05 + VirtualBox + WinXP)
  20. DARTS 可微 架构搜索

热门文章

  1. linux查看进程和端口信息的命令
  2. Tensorflow2.0 Resnet18与cifar100
  3. 字典转JSON字符串 字典转Data Data转JSON字符串 swift
  4. 【深度学习】非常详细 | 用 Pytorch 理解卷积网络
  5. 快速删除oracle中重复数据,效率高于直接删除数倍.
  6. 如何使用 Javascript 截断/切片/修剪字符串中的最后一个字符?
  7. 最简单启动vue前端项目
  8. 装系统计算机丢失msi,msi电脑一键重装系统win10详细步骤
  9. VS2019 MFC ODBC 操作SQL SERVER 数据库
  10. 边缘计算简介以及几款边缘计算开源平台