左手用R右手Python系列8——数据去重与缺失值处理
因为最近事情略多,最近更新的不勤了,但是学习的脚步不能停,一旦停下来,有些路就白走了,今天就盘点一下R语言和Python中常用于处理重复值、缺失值的函数。
在R语言中,涉及到数据去重与缺失值处理的函数一共有下面这么几个:
unique
distinct
intersect
union
duplicated #布尔判断
is.na()/!is.na() #缺/非缺失值
na.rm=TRUE/FALSE #移除缺失值
na.omit(lc) #忽略缺失值
complete.cases() #完整值
mydata<-data.frame(A=runif(20,0,100),B=sample(LETTERS[1:5],20,replace=TRUE))
mydata[sample(1:20,5,replace=FALSE),"A"]<-NA #认为构造了5个缺失值。
#unique函数通常用于去重:
unique(mydata$B) #对含有重复值得向量进行去重
dplyr::distinct(mydata,B) #对含有重复值字段的数据框去重
#交集与补集:
dplyr中提供了两个函数可以执行交集与补集操作:
duplicated(mydata$B) #返回重复对象的布尔值
mydata[!duplicated(mydata$B),] #剔除重复值,仅保留唯一值
A=LETTERS[1:10];B=LETTERS[6:15]
intersect(A,B) #交集
unique(A,B) #补集
#缺失值处理:
is.na()/!is.na() #缺/非缺失值判断
is.na(mydata) #返回存在缺失值的布尔结果
!is.na(mydata) #返回非缺失值的布尔结果
na.rm=TRUE/FALSE #移除缺失值
rm.na通常作为基础统计函数的参数使用,如mean,sum等
mean(mydata$A,na.rm=TRUE)
sum(mydata$A,na.rm=TRUE)
na.omit(mydata) #忽略缺失值所在行
complete.cases(mydata) #完整值(返回布尔结果)
mydata[!complete.cases(mydata$A),]#使用该函数的布尔索引确定缺失值或者排除缺失值
关于更为复杂的缺失值插补技术,因为涉及到一些比较深入的方法,这里暂且不呈现,仅对缺失值的描述和筛选做以上简单归总。
---------
Python:
---------
#列表去重:
set(将列表元组化过滤重复数据)
M=[1,4,3,6,5,4,3,2,7,8]
list(set(M))
#数据框的去重:
import pandas as pd
import numpy as np
mydata=pd.DataFrame({
"A":["A","B","C","D","B","C"],
"B":[43,32,56,67,32,56]
})
mydata.drop_duplicates()
#使用pandas提供的数据框去重函数drop_duplicates去重重复值。
#缺失值处理:
对于列表而言,numpy中诸多统计函数都有针对缺失值的操作:
nansum/nanmean/nanmin/nanmax
val= np.array([5,np.nan,8,9,np.nan])
np.nansum(val)
np.nanmean(val)
np.nanmin(val)
np.nanmax(val)
pandas中的序列和数据框都有固定的缺失值检测、描述、差值方法:
myserie=pd.Series(["A","B",np.nan,"C"])
mydata=pd.DataFrame({
"A":["A","B","C","D","E","F"],
"B":[43,np.nan,56,67,np.nan,56]
})
#检测缺失值:
myserie.isnull()
mydata.isnull()
#返回非缺失值:
myserie.notnull()
mydata.notnull()
#过滤缺失值:
myserie.dropna()
mydata.dropna()
#针对数据框而言,默认情况下,dropna丢弃含有缺失值的行。
mydata.dropna(how="all",axis=1) #丢弃含有缺失值的行或者列
#缺失值填充:
fillna函数一共两个参数:
value表示要插补的值
method表示缺失值插补方法
myserie.fillna(0)
mydata.fillna(0)
------------
本文小结:
------------
R语言:
数值去重:
unique
distinct
intersect
union
duplicated
缺失值处理:
is.na()/!is.na()
na.rm=TRUE/FALSE
na.omit(lc)
complete.cases()
Python:
重复值:
set(针对列表通过元组过滤)
drop_duplicates(针对pandas中的序列和数据框)
缺失值处理:
nansum/nanmean/nanmin/nanmax
isnull
dropna
fillna
R语言(ggplot2入门)可视化在商务场景中的应用,已经有200+小伙伴加入了!
感兴趣的可点击阅读原文报名参加哦,满满的干货!