初级数据校验 Python之Pandas知识点 Python之Pandas知识点

  很多时候在数据分析之前,我们需要对样本进行校验,以确定样本的价值。

  先写入数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({'一班':[90,80,66,75,99,55,76,78,98,None,90],
                   '二班':[75,98,100,None,77,45,None,66,56,80,57],
                   '三班':[45,89,77,67,65,100,None,75,64,88,99]})

1完整性校验

# 判断是否为缺失值(空值)
df.isnull()

# 统计出每一列的缺失值数目
df.isnull().sum()

# 每一列缺失比例
df.isnull().sum()/df.shape[0]
# 判断非空值的数目
df.notnull().sum()

  笔记:这里也可以用到describe方法,如下:

# 使用describe方法查看数据的完整性,统计出了非空值的数目
df.describe().iloc[0,:]

  忘了describe方法的话,请查看《Python之Pandas知识点

2时间跨度检验

  很多样本的时间数据并不是以datatime64类型存储的,此时我们得先进行“数据类型修改”

  详见:《Python之Pandas知识点》的4.3数据修改


  之后进行最大最小相减就OK了。

print(date.max()-date.min())

3重复检验

# 二班和四班是相同的
df1 = pd.DataFrame({'一班':[90,80,66,90,99,55,76,90,98,None,90],
                   '二班':[75,98,100,75,77,45,None,75,56,80,57],
                   '三班':[45,89,77,45,65,100,None,45,64,88,99],
                   '四班':[75,98,100,75,77,45,None,75,56,80,57]})

3.1样本重复检验(行)

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

  • subset:表示以这几个特征为基础,对整体样本进行去重。默认为使用所有特征
  • keep:表示保留第几个重复的样本。只允许填入first(保留第一个),last(保留最后一个),False(只要存在重复均不保留)。默认为first
  • inplace:表示是否在原DataFrame上进行操作,会改变原数据。默认为False
# 删除重复样本(行)
df1.drop_duplicates()

# 计算样本重复率
(df1.shape[0] - df1.drop_duplicates().shape[0])/df1.shape[0]

3.2特征重复检验(列)

  特征重复检验相比样本重复检验要麻烦一点,因为没有现成的函数可调用。

  需要用到相似度的概念,如下:

  • pearson相似度
  • spearman相似度
  • kendall相似度
# 使用pandas的方法:DataFrame.corr(method='pearson')
asso = df1.corr()
# 输出asso,看一下是怎样的先
print(asso)

  不难看出,这是一个对称矩阵,所以我们只需要判断右上半角的数据便可。

# 输出应删除的columns,1.0可根据需求改动
delCol = []
for i in range(len(asso)):
    for j in range(i+1,len(asso)):
        if asso.iloc[i,j] == 1.0:
            delCol.append(asso.columns[j])
        
print(delCol)

最后,附上一段 ♦特征重复检验♦ 的自定义代码:

# 输入DataFrame,输出特征重复的列名,可直接复制调用
def drop_features(data,way = 'pearson',assoRate = 1.0):
    '''
    此函数用于求取相似度大于assoRate的两列中的一个,主要目的用于去除数值型特征的重复
    data:数据框,无默认
    assoRate:相似度,默认为1
    '''
    assoMat = data.corr(method = way)
    delCol = []
    length = len(assoMat)
    for i in range(length):
        for j in range(i+1,length):
            if asso.iloc[i,j] >= assoRate:
                delCol.append(assoMat.columns[j])
    return(delCol)

  效果如下:

drop_features(df1)

  是不是超好用,巨方便~~~不谢

猜你喜欢

转载自www.cnblogs.com/WoLykos/p/9368743.html
今日推荐