数据挖掘学习之路三:数据缺失处理Python实现及基本指标计算

数据缺失处理python函数

数据缺失判断函数isnull()

 data.isnull()

(1)数据过滤(dropna)

数据过滤是将数据直接过滤掉

dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

parameters 详解
axis default 0指行,1为列
how {‘any’, ‘all’}, default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的行
thresh int,保留含有int个非空值的行
subset 对特定的列进行缺失值删除处理
inplace 这个很常见,True表示就地更改

df.dropna() #删除所有带缺失数据的行

(2)数据填充(fillna)

当数据有缺失值时,用其他值替代

fillna(value,method,axis)

parameters 详解
axis default 0指行,1为列
value 填充值
method 采用填充数值的方法,默认none

df.fillna(0) #用0替换所有的缺失值

(3)拉格朗日插值法

lagrange(y.index, list(y))(n)

(4)检测和过滤异常数据

通过过滤变换发现异常值,然后删除或者替换异常值

(5)移除重复数据

 #重复判断
data5.duplicated()
#去重
data5.drop_duplicates()

(6)数据规范化

主要实现数据归一化

 #最大最小规范化
min=(data6-data6.min())/(data6.max()-data6.min())
print(min)
#零均值规范化
zero=(data6-data6.mean())/data6.std()
print(zero)
#小数定标规范化
float=data6/10**np.ceil(np.log(data6.abs().max()))
print(float)

(7)汇总和描述等统计量的计算

#对数据的基本统计量进行描述,得到每列数据的行数、平均值、协方差、最小值、		四分之一分位数、中位数、四分之三分位数、最大值
print(df.describe())
#统计每列数据的和,axis=1每行数据的和
print(df.sum())
print(df.sum(axis=1))
#统计每列最小数值所在的行,axis=1每行最小所在的列
print(df.idxmin())
print(df.idxmin(axis=1))
#统计每列最大数值所在的行,axis=1每行最大所在的列
print(df.idxmax())
print(df.idxmax(axis=1))
#计算方差
print(df.var())
#计算协方差
print(df.std())
#计算百分数变化
print(df.pct_change())
#计算协方差
print(df.cov())
#计算相关系数
print(df.corr())

完整Python测试代码如下:

# -*- coding:utf-8 -*-
# __author__ = "LQ"

from pandas import Series,DataFrame,np
from numpy import nan as  NA
import pandas as pd
from scipy.interpolate import lagrange

data=Series([12,None,34,NA,68])
#删除所有带缺失的数据行
data1=data.dropna()
print(data1)

data2=DataFrame(np.random.randn(5,4))
data2.ix[:2,1]=NA
data2.ix[:3,2]=NA
print(data2)
#保留含有两个非空的行
print(data2.dropna(thresh=2))
#保留含有三个非空的行
print(data2.dropna(thresh=3))

#使用0替换所有缺失值
print(data2.fillna(0))
#字典方法对缺失值进行填充
print(data2.fillna({1:11,2:22}))
#平均值替换
print(data2.fillna({1:data2[1].mean(),2:data2.mean()}))

#拉格朗日插值法
df=DataFrame(np.random.randn(20,2),columns=['first','second'])
#过滤异常值,将其变为空值
df['first'][(df['first']<-1.5) | (df['first']>1.5)] = None
print(df)
#差值函数
def ployinterp_column(s,n,k=5):
    y=s[list(range(n-k,n))+list(range(n+1,n+1+k))] #取数
    y=y[y.notnull()]
    return lagrange(y.index, list(y))(n)

for i in df.columns:
    for j in range(len(df)):
        if(df[i].isnull())[j]:
            df[i][j]=ployinterp_column(df[i],j)
print(df)

#检测后替换异常值
data3=DataFrame(np.random.randn(10,4))
data4=data3[2]
print(data4[np.abs(data4)>1])
#检测大于1的数据,将异常值替换为0.5
data4[np.abs(data4)>1] = 0.5
print(data4)

#移除重复数据
data5=pd.DataFrame({'name':['zhang']*3+['wang']*4,'age':[18,18,19,19,20,20,21]})
print(data5)
#重复判断
print(data5.duplicated())
#去重
print(data5.drop_duplicates())
#去重默认保留前一个,想保留后一个要加一个参数
print(data5.drop_duplicates(keep='last'))

#数据规范化,归一化
data6=Series([18,18,19,19,20,20,21])
#最大最小规范化
min=(data6-data6.min())/(data6.max()-data6.min())
print(min)
#零均值规范化
zero=(data6-data6.mean())/data6.std()
print(zero)
#小数定标规范化
float=data6/10**np.ceil(np.log(data6.abs().max()))
print(float)

#汇总和描述等统计量的计算
df=DataFrame(np.random.randn(4,3),index=list('abcd'),columns=['first','second','third'])
#对数据的基本统计量进行描述,得到每列数据的行数、平均值、协方差、最小值、四分之一分位数、中位数、四分之三分位数、最大值
print(df.describe())
#统计每列数据的和,axis=1每行数据的和
print(df.sum())
print(df.sum(axis=1))
#统计每列最小数值所在的行,axis=1每行最小所在的列
print(df.idxmin())
print(df.idxmin(axis=1))
#统计每列最大数值所在的行,axis=1每行最大所在的列
print(df.idxmax())
print(df.idxmax(axis=1))
#计算方差
print(df.var())
#计算协方差
print(df.std())
#计算百分数变化
print(df.pct_change())
#计算协方差
print(df.cov())
#计算相关系数
print(df.corr())
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值