精华内容
下载资源
问答
  • 在大部分的数据分析里面,直接获取的数据都会存在一些问题,比如缺失值,异常值等,在进行深度分析前都需要对这些数据进行预处理。 读取并初步查看数据 读取数据后查看数据特征列, 首先筛选出分析所需要的列,然后...

    在大部分的数据分析里面,直接获取的数据都会存在一些问题,比如缺失值,异常值等,在进行深度分析前都需要对这些数据进行预处理。

    读取并初步查看数据

    读取数据后查看数据特征列,

    首先筛选出分析所需要的列,然后再对数据进行描述统计(describe)和箱线图(boxplot),查看数据的缺失情况,异常值分布情况。但是在特征量很多时并不适合用图查看。
    在进行数据统计时,在spyder中为了显示所有行和列,会需要用到两行语句:
    pd.set_option(‘display.max_rows’,None) #显示所有行
    pd.set_option(‘display.max_columns’,None) #显示所有列

    import pandas as pd
    pd.set_option('display.max_rows',None)  #显示所有行
    pd.set_option('display.max_columns',None)   #显示所有列
    filename='E:\python总结\实例数据\数据预处理之空值与异常值\克旗已合并数据.csv'
    data=pd.read_csv(filename,index_col=0,engine='python') #读取数据,并将时间设置为索引
    data.columns
    
    Index(['WS0', 'WS1', 'WS2', 'WS3', 'WS4', 'WS5'], dtype='object')
    

    所有的列名称均属于分析范畴,因此不需要进行列筛选

    查看数据并删除重复数据

    data.shape
    Out[21]: (29, 6)
    data.index.is_unique
    Out[22]: True
    

    本次数据不存在重复时间数据,不需要进行去重,关于去重,可查看我的文章:多个dataframe的列合并与行合并;接下来查看数据统计特征。

    data.describe()
    

    在这里插入图片描述

    通过对每一行数据量和最大最小值的初步观察,数据存在空值和异常值;由于本次分析的是风速的数据,根据以往的经验观察,风速范围约在0-30米范。因此需要对空值和异常值进行处理

    空值处理方法一:直接删除

    当数据量较少,且这几个样本对总体分析不会产生很大影响时,可以直接删除。直接用dropna删除含有空值的行,并查看删除前后的数据结构。

    data_d.shape
    Out[6]: (29, 6)
    
    data_d=data_d.dropna()
    
    data_d.shape
    Out[8]: (14, 6)
    

    关于dropna的参数具体如下:
    axis: 0为按行删除,1为按列删除;默认axis=0。
    how: 默认 any。 any只要含有缺失值得行(列)就删除;all指清除一整行(列)都是缺失值的。
    thresh: 值N为整数,指定保留含有N个非空值的行;
    subset: 输入列名称,删除指定列中包含缺失值的行或列;
    inplace: 默认False,即筛选后的数据存为副本,True表示直接在原数据上更改。

    空值处理方法二:数据插补

    在时间序列类的数据处理中,需要保持数据中时间的连贯性,因此出现部分缺失时,需要进行插补。
    插补的方式可以分为很多种,在目前来看,较为简单的有以下几类:
    (1)向上(下)插补,就是取空置(异常值)前面或者后面的数据进行填充;
    (2)指定数值插补,可以指定固定的值进行插补;
    (3)滑动均值插补,可以用指定序列的均值进行插补;
    (4)拉格朗日插补,在进行连续的数据插补中,拉格朗日插值的效果不好;
    (5)分段插值;
    (6)机器学习插补等
    插值的方法有很多种,具体可参考介绍: https://zhuanlan.zhihu.com/p/63763725
    根据不同的需求来进行选择,目前来说只需要简单的进行数据处理,我们可以选择较为简单的几类插补方法,下面着重介绍(1)-(3)

    向上(下)和指定数值插补:fillna

    这两种插补方法是都是直接取前后或者指定的值进行插补,用到的都是统一个函数fillna(),

    data.fillna(0)   #所有空值都填充为0
    data.fillna(method='ffill') #向上填充
    data.fillna(method='bfill') #向下填充
    data.fillna(method='bfill',limit=2)   #向下填充2个空值
    data.fillna(data.mean())   #均值填充,也可用中位数
    

    滑动均值插补

    选取需要插补的数据的前后几个非空数据,计算均值进行填充;自定义函数sma_method,有三个参数;series为需要进行插补的列数据;pos为需要插补的数据的索引位置;window为插补取得前后数据个数。
    :该方法的主要缺点为如果空值前后存在极端异常值,会影响到空值得插补。

    from functools import reduce
    #定义滑动平均插补函数
    def sma_method(series,pos,window=3):
        y=series[list(range(pos-window,pos))+list(range(pos+1,pos+1+window))]  
        y=y[y.notnull()]  #剔除所取值中的空值
        return reduce(lambda a,b:a+b,y)/len(y)
    
    #查找空值并进行插补
    data_f=data.copy()
    
    for h in data_f.columns:
        for i,value in enumerate(data_f[h]):
            if np.isnan(data_f[h][i]):
                data_f[h][i]=sma_method(data_f[h],i)
    
    

    插补前的数据:在这里插入图片描述

    插补后的数据:
    在这里插入图片描述
    因此,在常规的数据处理中,对于空值,能够删除的就删除,不能删除的也是采取的上下插补或者均值插补方法,这些方法都有利有弊,需要酌情选择。

    异常值处理方法一:直接删除

    数据量较少时,可直接删除

    data_t=data.copy()
    data_t.shape  #查看删除前数据量
    ——————————————
    Out[4]: (29, 6)
    #直接按照风速范围(0.2,30)进行筛选
    for h in data_t.columns:
        data_t=data_t[(data_t[h]>0.2)&(data_t[h]<30)]
        
    data_t.shape   #删除后查看数据量
    Out[6]: (12, 6)
    

    异常值处理方法二:进行插补

    此方法与空值插补类似,就不做多解释。

    知识点解释:

    匿名(lambda)函数:该语句仅由单条语句构成,语句的结果就是返回值,在python中经常会遇到此类语句,且会与其他语句套用。
    a=lambda x,y:x+y
    这里x和y分别为data中的值,需要执行的是x+y这个公式,返回的是两个数据相加的和。

    示例如下:

    a=(lambda x,y:x+y)
    a(5,6)
    Out[13]: 11
    

    reduce函数:函数将一个数据集合中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
    参数:
    function – 函数,有两个参数
    iterable – 可迭代对象
    initializer – 可选,初始参数

    reduce与lambda嵌套使用,可用来累加,累乘
    示例如下:

    dt=[1,2,3,4,5]
    reduce(lambda x, y: x+y, dt) 
    
    Out[17]: 15
    
    展开全文
  • 使用Pandas进行数据预处理数据清洗中不是每一步都是必须的,按实际需求操作。内容目录1、数据的生成与导入2、数据信息查看2.1、查看整体数据信息2.2、查看数据维度、列名称、数据格式2.3、查看数据特殊值和数值2.3.1...

    使用Pandas进行数据预处理

    数据清洗中不是每一步都是必须的,按实际需求操作。

    内容目录

    1、数据的生成与导入

    2、数据信息查看

    2.1、查看整体数据信息

    2.2、查看数据维度、列名称、数据格式

    2.3、查看数据特殊值和数值

    2.3.1、查看空值

    2.3.2、查看唯一值

    2.3.3、查看数值

    2.3.4、查看前后数据

    3、数据清洗和预处理等步骤

    3.1、空值处理

    3.2、空格处理

    3.3、字符串大小写处理

    3.4、更改数据类型和列名称

    3.5、重复值处理

    3.6、数据替换

    3.7、数据合并和排序

    3.8、数据分组

    4、数据提取和筛选

    4.1、按位置提取

    4.2、按标签提取

    4.3、按条件提取

    4.4、数据筛选

    5、数据汇总与统计量计算

    5.1、groupby用法

    5.2、数据透视表用法

    5.3、数据采样

    5.4、数据求均值、方差等

    5.5、数据求相关系数等

    6、数据存储

    6.1、存储到Execl

    6.2、存储到CSV

    1. 读取数据

    importpandas as pd

    data= pd.read_excel(io='D:\A\data.xlsx')

    2. 数据信息

    print(data.shape) #查看数据规模(维度)

    print(data.dtypes) #查看各变量的数据类型

    print(data.info()) #查看数据整体信息

    print(data.describe()) #查看数据描述

    print(data.isnull()) #查看空值

    print(data.columns) #列名

    print(data['Age'].unique()) #查看Age唯一值

    print(data.values) #查看数据表值

    print(data.head(5)) #查看前5行

    print(data.tail(5)) #查看后5行

    3. 清洗

    data.dropna(how='any', inplace=True) #空值处理,删除

    data.fillna(0) #空值处理,填充:方法多种

    data['name'] = data['name'].map(str.strip) #空格处理

    data['name'].str.lower() #大小写转换

    data['age'].astype('int') #更改数据类型

    data.rename(columns={'name':'名字', 'Age':'年龄"}) # 更改列名

    data['name'].drop_duplicates(keep='last') #删除重复值,保留最后一个

    data['Embark'].replace('C', 'c') #数据替换

    3.1 重复数据的处理

    #判断数据中是否存在重复值

    data.duplicated().any#删除重复值,会删除除第一条后的,默认对所有变量判断

    data.drop_duplicates()#指定变量判断

    data.drop_duplicates(subset=['name', 'age'],keep='first', inplace=False) #first保留第一个,inplace=True对原数据修改

    4. 缺失值(NA)识别与处理

    #判断各变量中是否存在缺失值

    data.isnull().any(axis=0)#各变量中缺失值的数量

    data.isnull().sum(axis=0)#各变量中缺失值的比例

    data.isnull().sum(axis=0)/data.shape[0]#判断数据行中是否存在缺失值

    data.isnull().any(axis=1).any() #第二个any表示所有行

    4.1 直接去除

    #列变量缺失非常高的(70%),删除该变量

    data.drop(labes='name', axis=1,inplace=True) #删除name字段#删除name变量中对应的缺失值

    data = data.drop(labels=data.index[['name'].isnull()],axis=0)#行内#缺失变量的将该行删除(缺失行的比例不高于5%)#变量缺失非常高的(70%),将该行删除

    4.2 对缺失值进行填充(用中位数或平均数...)

    data.fillna(value={'age':data['age'].mode()[0], #使用众数替换

    'num':data['num'].mean() #使用平均值替换

    },

    inplace=True

    )

    data.dropna() #直接删除含有缺失值的行

    data.dropna(axis = 1) #直接删除含有缺失值的列

    data.dropna(how = 'all') #只删除全是缺失值的行

    data.dropna(thresh = 3) #保留至少有3个非空值的行

    data.dropna(subset = [u'血型 ']) #判断特定的列,若该列含有缺失值则删除缺失值所在的行

    5. 异常数据的识别和处理

    6. 排序

    data.sort_valurs(by=['Age']) #按字段排序

    data.sort_index() #按索引排序

    7. 合并merge

    #合并方式: inner, outer, left, right#组合方式: left_on+right_on、left_on+right_index、left_index+right_on、left_index+right_index

    #merge参数

    pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False)#例子

    data1 = pd.DataFrame({'lkey': list('abcdefg'), 'data1': range(7)})

    data2= pd.DataFrame({'rkey': list('agsdgf'), 'data2':range(6)})print(pd.merge(data1, data2, left_on='lkey', right_on='rkey'))

    数据分组

    data['group'] = np.where(data['fa']>60, 'high', 'low')

    data[['fa', 'group']]

    数据汇总与统计量计算

    data.groupby(['columns']) #按字段分组

    pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None,

    margins=False, dropna=True, margins_name='All') #数据透视表

    data.sample(n=2)

    data.describe()#描述统计量

    data['a'].cov(data['b']) #计算两字段的协方差

    data.corr() #相关性

    计算每行指定属性的平均值,作为新的一列加入到原数据中。

    data.eval('avg = (Chinese + Math +English)/3.0', inplace=True)

    8. 保存

    8.1 保存到excel

    data.to_excel('data.xlsx', sheet_name='a')

    8.2 保存到csv

    data.to_csv('data1.csv')

    8.2 保存到数据库

    其他:

    展开全文
  • interpolate 包含了大量的插值函数 unique 去除数据中的重复元素 isnull/notnull 判断元素是否空值 random 用于生成服从特定分布的随机矩阵 PCA 对指标变量矩阵进行主成分分析 ...

    interpolate
    包含了大量的插值函数
    unique
    去除数据中的重复元素
    isnull/notnull
    判断元素是否空值
    random
    用于生成服从特定分布的随机矩阵
    PCA
    对指标变量矩阵进行主成分分析

    展开全文
  • 数据预处理

    2019-07-02 12:41:14
    空值一般表示数据未知、不适用或将在以后添加的数据空值一般用None表示,缺失值一般用NaN表示。 1、在pandas中使用 isnull()和 notnull()函数可以判断数据集中是否存在空值和缺失值. isnull...

    1、数据清洗

    数据清洗是指发现并纠正数据文件中可识别的错误,包括检查数据一致性,处理无效值和缺失值等。

      (1):空值和缺失值的处理

         空值一般表示数据未知、不适用或将在以后添加的数据。空值一般用None表示,缺失值一般用NaN表示。

         1、在pandas中使用 isnull() notnull() 函数可以判断数据集中是否存在空值和缺失值.

         isnull() 语法格式如下:pandas.isnull(arr)   表示检查arr中的空值,一旦发现存在NaN(缺失值)或者None(空值)时将这个位置标为True,否则就标记为False

         notnull() 函数和 isnull() 函数一样,不同之处在于返回结果相反。

         2、在pandas中使用 dropns() 删除含有空值或者缺失值的行或者列。

         3、填充空值或者缺失值。

         在pandas中使用 fillna() 可以实现填充值或缺失值。

         4、重复值的处理

         通过 duplicated() 方法处理重复值

         5、异常值处理

         异常值一般值样本中的个别值比较极端,其数据明显偏离样本中的其他值。

         常用的方法有 拉依达准则 和 基于箱形图检测异常值 两种

         6、更改数据类型

         可以在创建Pandas时明确指定数据类型,也可通过 astype() 和 to_numberic() 函数进行转换  

    图片来自https://cloud.tencent.com/developer/article/1366604

    2、数据合并

        1、轴向堆叠数据

         concat()函数可以沿着一条轴将多个对象进行堆叠。根据轴方向的不同,可分为纵向堆叠和横向堆叠。

        2、主键合并数据

         merge()

        3、根据行索引合并数据

         join()

        4、合并重叠数据

         combine_fiest()

    3、数据重塑

    有时候需要将DataFrame对象转换为Series对象,为此,pandas提供了数据重塑的功能,包括:“重塑层次化索引”和“轴向索引

        1、重塑层次化索引

        stack()  将数据的列 旋转 为行。

        unstack()  将数据的行 旋转 为列。

         2、轴向索引

         DataFrame.pivot(index=None, columns=None, values=None)

    4、数据转换

    数据转换是指从一种表现形式变为另一种表现形式的过程,具体包括:

       1、重命名轴索引

           rename()

        2、离散化连续数据

            cut()

        3、哑变量处理类别型数据

            get_dummies()

     

     

     

    展开全文
  • 大数据的预处理,人工删除很麻烦 Python恰好能够解决 注释很详细在这不一一解释了 ###################################### ##### 读写excel(xls\xlsx)文件 import pandas as pd import numpy as np df_excel = pd....
  • 1. 删除重复数据 unique (x) &amp;amp;gt; a30,10,20)) #生成有重复值得数据 &amp;amp;gt; a [1] 19 10 13 15 16 13 14 14 19 11 11 20 14 14 12 11 17 16 20 16 11 12 [23] 15 10 14 13 19 17 12 15 &...
  • 数据预处理包含:数据盘点-数据可视化分析-空值填充-数据编码import matplotlib.pyplot as pltimport seaborn as snsfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.linear_model import ...
  • 数据分析之路持续学习中- - -近期学习了机器学习中的数据预处理章节,在此进行分享,欢迎大家讨论指正。顺便说一下,这里我使用的软件是Anacnoda 3中已经安装好的Spyder 3,这个软件用起来很爽,适合用来做数据分析...
  • 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。1 缺失值1.1 检查是否存在缺失值#显示表格中每一列的信息 data.info() #直接判断是否存在空值 data.isnull() data.isnull().sum(axis=1).sort_...
  • 数据从业务中来,到业务中去 商业数据如何真正服务业务,解决具体的业务场景? 废话不多说,LIST如下: 1.了解业务 收集业务背景信息,了解业务发展现阶段,弄清楚公司现在面对的核心市场、核心人群、产品推广和...
  • 1. 数据清洗1.1 空值和缺失值的处理​空值一般表示数据未知、不适用或将在以后添加数据。缺失值是指数据集中某个或某些属性的值是不完整的。​一般空值使用None表示,缺失值使用NaN表示1.1.1 使用isnull()和notnull...
  • % 导入数据(原始数据) Data = xlsread('F:\实验数据\数据汇总表111','D:M'); figure(1) x3str={'z1','z2','z3','z4','z5','z6','z7','z8','z9','z10','z11','z12','z13','z14','z15'} bar(Data(1:15)) xtextp...
  • 数据预处理过程

    2016-01-05 21:51:23
    概括起来,统计数据预处理的过程包括数据审查、数据清理、数据转换和数据验证四大步骤。 (一)数据审查 该步骤检查数据的数量(记录数)是否满足分析的最低要求,字段值的内容是否与调查要求一致,是否全面;还包括...
  • 预处理-如何去除数据中的空值

    千次阅读 2019-01-16 15:24:13
    预处理-如何去除数据中的空值
  • Python数据预处理

    2019-04-19 16:15:18
    检查数据 空值检查 #查看数据是否有空 notnull df.isnull().sum()#每一列的缺失值总和 df.isnull().any()#检查哪一列有空值 df[df.isnull().values==True]#显示有空值的行 整体情况 #查看行是否有...
  • 一,热卡插补热卡填充(Hot deck imputation)也叫就近补齐,对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。通常会找到超出一个的相...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 186
精华内容 74
关键字:

数据预处理空值