精华内容
下载资源
问答
  • pandas处理缺失值

    万次阅读 2018-01-09 20:59:20
    在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。 一、缺失值的判断 pandas使用浮点值NaN(Not a Number)表示浮点数和非...

    在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。

    一、缺失值的判断

    pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。

    a、Series的缺失值判断

        s = Series(["a","b",np.nan,"c",None])
        print(s)
        '''
        0       a
        1       b
        2     NaN
        3       c
        4    None
        '''
        #判断缺失值,如果是则返回True,否则返回False
        print(s.isnull())
        '''
        0    False
        1    False
        2     True
        3    False
        4     True
        '''
        #输出缺失值的索引和值
        print(s[s.isnull()])
        '''
        2     NaN
        4    None
        '''
    展开全文
  • 5、将姓名的缺失值进行填充 6、将清洗好的数据保存到指定excel中 原始数据: 最后输出数据: 处理步骤: 1、读取数据: 2、删除全是空值的列 3、删除全是空值的行 4、将分数列值为NAN(空值)的填充为0分 5、...
  • 主要介绍了详解Pandas 处理缺失值指令大全,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 5.Pandas处理缺失值

    2020-07-18 18:37:10
    文章目录Pandas处理缺失值如何标记缺失值全局掩码使用标签值Pandas缺失值Python的None对象浮点数据类型的NaNNone与NaN的差异处理缺失值发现缺失值剔除缺失值填充缺失值 Pandas处理缺失值 我们在现实生活中真正需要...

    Pandas处理缺失值

    我们在现实生活中真正需要处理的数据并不是十全十美的,往往会出现数据缺失的现象,更为甚者,处理不同数据源缺失值的方法还不同

    本节将介绍一些处理缺失值的通用规则,Pandas对缺失值的表现形式以及Pandas子代的几个处理缺失值的工具的用法.

    一般来说涉及的缺失值有三种形式:null,NaN和NA


    如何标记缺失值

    缺失值是数据的一种特殊状态,不代表任何数据,因此我们为了将缺失值和正常数字区分开,就需要来标记缺失值.

    一般标记缺失值有两种方法:通过全局的掩码和使用标签值

    全局掩码

    全局掩码的意思是不对原数组进行任何操作,而是重新开辟一个同样大小,同样形状的布尔数组,用对应位的布尔值来表示数据是否缺失.

    例如

    list_1=[[1,2,3]
            [缺失值,5,6]]
    list_1_mask=[[1,1,1],
                 [0,1,1]]
    

    但是使用全局掩码却会造成一个额外的布尔数组的开辟,当需要处理的数据较大时,会造成空间浪费

    使用标签值

    使用标签值来区分缺失值的含义就是在正常表示范围内,取某一个值来表示缺失值

    例如,4字节16比特的数字,第一位为符号位,取如下二进制数组为缺失值:1111 1111 1111 1111

    使用标签值的问题也很大,将会减少我们数字的表示范围,而且会影响编程逻辑,因为正常来说1111 1111 1111 1111是会被当成正常数据参与运算的,但是如果其表示缺失值的话,那么任何一个数字与缺失值相加都会变成缺失值,这就意味着编程时需要额外的逻辑

    一般来说,在大多数情况下是不存在最佳选择的,不同的编程语言与不同的系统使用的标记缺失值的方法不同,例如R语言每种数据类型中保留一个比特作为缺失数据的标签值,SciDB系统会在每个单元后面额外增加一个字节表示缺失状态


    Pandas的缺失值

    Pandas原本可以按照R语言一样,通过比特位来为每一种数据类型标注缺失值.但是R语言本身只包含4种数据类型,而Numpy却支持14种基本数据类型,想要标记每种数据类型的数据是否缺失,需要分出的比特位就太多了,何况编码会极度的不方便

    因此综合考虑下,Pandas最终选择使用标签的方法来表示缺失值,包括:浮点数据类型的NaN,Python的None对象

    不过Pandas也支持使用全局掩码的方式来表示缺失值

    下面将分别介绍Python的None对象和浮点数据类型的NaN

    Python的None对象

    None是原生Python内置的一个对象,他经常在代码中表示缺失值

    由于None是Python的对象,因此不能作为Numpy和Pandas中数组类型的缺失值,只能在Object类型数组(即由Python对象构成的数组)中表示缺失值

    例如

    array_1=np.array([1,2,3,4])
    array_2=np.array([1,2,None,4])
    print(array_1.dtype)
    print(array_2.dtype)
    >>>
    int64
    object
    

    这里将array_2中的所有元素视为Python的对象,而非经过Numpy加速过的对象,因此所有的处理都将在Python层面完成,这样就导致了速度会很慢,消耗更多的资源

    此外,None由于是Python中的对象,但是Python却并没有定义None对象与任何其他的数据之间的运算,因此如果None对象参与运算,Python就会报错

    array_1=np.array([1,2,3,4])
    array_2=np.array([1,2,None,4])
    print(array_1+array_2)
    >>>
    Traceback (most recent call last):
      File "TryPandas.py", line 231, in <module>
        print(array_1+array_2)
    TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
    

    浮点数据类型的NaN

    正如其名,NaN本质上是一个浮点数,不过被选取来表示缺失值,这是IEEE所规定的,全球通用的指定的特殊字符

    NaN全称是Not a number,在任何系统中都兼容的特殊浮点数

    例如

    array_1=np.array([1,2,np.nan,4])
    print(array_1.dtype)
    >>>
    float64
    

    可以看到,原本是整型数组的array_1被自动的转化为float64了

    既然NaN是一个特殊的浮点数,因此NaN就可以参与运算而不会让编译器报错,只不过任何数组与NaN进行运算都会变成NaN

    array_1=np.array([1,2,np.nan,4])
    array_2=np.array([1,2,3,4])
    print(array_1+array_2)
    print(array_1.sum())
    print(array_1.min())
    >>>
    [ 2.  4. nan  8.]
    nan
    nan
    

    注意,运算不仅包括四则远算,还包括逻辑运算等等

    因此,为了避免NaN的污染效益,Numpy提供了一些特殊的累计函数,又称为NaN安全版本,他们可以忽略nan的影响

    例如

    array_1=np.array([1,2,np.nan,4])
    print(np.nansum(array_1))
    print(np.nanmin(array_1))
    >>>
    7.0
    1.0
    

    None与NaN的差异

    虽然None与NaN各有各的用处,但是Pandas将两者视为等同的,并在适当的时侯会将两者进行替换.

    例如

    Series_1=pd.Series(range(4),index=list('abcd'))
    print(Series_1)
    Series_1['a']=None
    print(Series_1)
    >>> 
    a    0
    b    1
    c    2
    d    3
    dtype: int64
    a    NaN
    b    1.0
    c    2.0
    d    3.0
    dtype: float64
    

    可以发现None被自动转化为NaN

    除此以外,虽然Pandas目前只有这两种缺失值,但是GitHub上Pandas的维护人员却有人提议创建Pandas原生的NA来标记缺失值


    处理缺失值

    我们知道,Pandas基本上把None和NaN看作是可以等价交换的缺失值形式,而Padas提供了用于发现,剔除和替换缺失值的方法,主要包括以下集中

    • isnull()
    • notnull()
    • dropna()
    • fillna()

    发现缺失值

    发现缺失值有两种方法,isnull()和notnull()

    两种方法将会返回布尔类型的全局掩码

    Series_1=pd.Series([1,2,None,np.nan],index=list('abcd'))
    print(Series_1)
    print(Series_1.isnull())
    print(Series_1.notnull())
    >>>
    a    1.0
    b    2.0
    c    NaN
    d    NaN
    dtype: float64
    a    False
    b    False
    c     True
    d     True
    dtype: bool
    a     True
    b     True
    c    False
    d    False
    dtype: bool
    

    结合我们之前讲的,可以直接将布尔类型的掩码数组作为花哨的索引使用

    Series_1=pd.Series([1,2,None,np.nan],index=list('abcd'))
    print(Series_1)
    print(Series_1[Series_1.isnull()])
    print(Series_1[Series_1.notnull()])
    >>>
    a    1.0
    b    2.0
    c    NaN
    d    NaN
    dtype: float64
    c   NaN
    d   NaN
    dtype: float64
    a    1.0
    b    2.0
    dtype: float64
    

    剔除缺失值

    Pandas提供了很好的剔除缺失值的方法,就是dropna()方法

    对于Series对象,直接调用即可

    Series_1=pd.Series([1,None,3,np.nan],index=list('abcd'))
    print(Series_1)
    print(Series_1.dropna())
    >>>
    a    1.0
    b    NaN
    c    3.0
    d    NaN
    dtype: float64
    a    1.0
    c    3.0
    dtype: float64
    

    可以发现,所有具有NaN的连带索引都被丢弃了,最终返回一个新的Series对象

    对于DataFrame对象,在真实情况中我们可能需要删除NaN所在的行或者列,因此对于DataFrame对象,dropna()方法就有一些参数可以配置

    默认情况下,将会剔除NaN所在的整行数据,但是我们可以指定axis参数来剔除列

    我们也可以指定how参数来指定整行或整列只要有NaN就丢弃还是整行整列都是NaN才会丢弃

    DataFrame_1=pd.DataFrame(np.random.randint(0,10,(4,5)),index=list('abcd'),columns=list('abcde'))
    DataFrame_1.iloc[:,2]=np.nan
    DataFrame_1.iloc[0,0]=np.nan
    +
    print(DataFrame_1)
    print('')
    print(DataFrame_1.dropna())
    print('')
    print(DataFrame_1.dropna(axis='columns'))
    print('')
    print(DataFrame_1.dropna(axis=1))
    print('')
    print(DataFrame_1.dropna(how='any'))
    print('')
    print(DataFrame_1.dropna(axis='columns',how='all'))
    >>>
         a  b   c  d  e
    a  NaN  5 NaN  5  4
    b  0.0  4 NaN  5  3
    c  8.0  0 NaN  1  6
    d  2.0  8 NaN  9  9
    
    Empty DataFrame
    Columns: [a, b, c, d, e]
    Index: []
    
       b  d  e
    a  5  5  4
    b  4  5  3
    c  0  1  6
    d  8  9  9
    
       b  d  e
    a  5  5  4
    b  4  5  3
    c  0  1  6
    d  8  9  9
    
    Empty DataFrame
    Columns: [a, b, c, d, e]
    Index: []
    
         a  b  d  e
    a  NaN  5  5  4
    b  0.0  4  5  3
    c  8.0  0  1  6
    d  2.0  8  9  9
    

    填充缺失值

    有的时候我们并不想剔除缺失值,因为这样会导致我们的数组形状发生改变.

    因此我们有的时候想要保持数组的形状在不改变的基础上,对缺失值进行填充,例如全部填充为0或者均值

    我们可以使用isnull()来获取掩码数组,然后利用花哨的索引来直接填充所有的缺失值

    Pandas提供了更加高效的fillna()方法来根据需求填充缺失值

    对于Series对象,我们可以指定填充值

    也可以指定method参数来指定填充方法,可以是从前往后填充ffill(forward-fill),也可以是从后往前bfill(back-fill)

    Series_1=pd.Series([0,1,2,None,3,4,np.nan],index=list('abcdefg'))
    print(Series_1)
    print(Series_1.fillna(0))
    print(Series_1.fillna(method='ffill'))
    print(Series_1.fillna(method='bfill'))
    >>>
    a    0.0
    b    1.0
    c    2.0
    d    NaN
    e    3.0
    f    4.0
    g    NaN
    dtype: float64
        
    a    0.0
    b    1.0
    c    2.0
    d    0.0
    e    3.0
    f    4.0
    g    0.0
    dtype: float64
        
    a    0.0
    b    1.0
    c    2.0
    d    2.0
    e    3.0
    f    4.0
    g    4.0
    dtype: float64
        
    a    0.0
    b    1.0
    c    2.0
    d    3.0
    e    3.0
    f    4.0
    g    NaN
    dtype: float64
    

    需要注意的是如果填充的前一个或者后一个也是NaN,或者是第一个NaN,填充的结果也是NaN

    针对DataFrame对象的填充则可以指定填充的行列

    DataFrame_1=pd.DataFrame(np.random.randint(0,10,(4,5)),\
        index=list('abcd'),columns=list('abcde'))
    DataFrame_1.iloc[:,3]=np.nan
    DataFrame_1.iloc[2,2]=None
    print(DataFrame_1)
    print(DataFrame_1.fillna(0))
    print(DataFrame_1.fillna(axis=1,method='ffill'))
    print(DataFrame_1.fillna(axis=0,method='bfill'))
    >>>
       a  b    c   d  e
    a  8  9  6.0 NaN  6
    b  6  4  2.0 NaN  5
    c  1  1  NaN NaN  5
    d  7  1  4.0 NaN  1
    
       a  b    c    d  e
    a  8  9  6.0  0.0  6
    b  6  4  2.0  0.0  5
    c  1  1  0.0  0.0  5
    d  7  1  4.0  0.0  1
    
         a    b    c    d    e
    a  8.0  9.0  6.0  6.0  6.0
    b  6.0  4.0  2.0  2.0  5.0
    c  1.0  1.0  1.0  1.0  5.0
    d  7.0  1.0  4.0  4.0  1.0
    
       a  b    c   d  e
    a  8  9  6.0 NaN  6
    b  6  4  2.0 NaN  5
    c  1  1  4.0 NaN  5
    d  7  1  4.0 NaN  1
    
    展开全文
  • pandas - 缺失值处理

    千次阅读 2019-03-11 17:31:59
    说明Pandas缺失值类型 应用replace实现数据的替换 应用dropna实现缺失值的删除 应用fillna实现缺失值的填充 应用isnull判断是否有缺失数据NaN 应用:对电影数据进行缺失值处理 1 电影数据文件获取 # 读取...

    学习目标

    • 说明Pandas的缺失值类型
    • 应用replace实现数据的替换
    • 应用dropna实现缺失值的删除
    • 应用fillna实现缺失值的填充
    • 应用isnull判断是否有缺失数据NaN
    • 应用:对电影数据进行缺失值处理

    1 电影数据文件获取

    # 读取电影数据
    movie = pd.read_csv("./data.csv")
    

    2 缺失值的处理逻辑

    对于NaN的数据,在pandas中我们处理起来非常容易

    • 判断数据是否为NaN:pd.isnull(df),pd.notnull(df)

    处理方式:

    • 存在缺失值nan,并且是np.nan:
      • 1、删除存在缺失值的:dropna(axis='rows')
      • 2、替换缺失值:fillna(df[].mean(), inplace=True)
    • 不是缺失值nan,有默认标记的

    3 存在缺失值nan,并且是np.nan

    • 删除
    # pandas删除缺失值,使用dropna的前提是,缺失值的类型必须是np.nan
    movie.dropna()
    
    • 替换缺失值
    # 替换存在缺失值的样本
    # 替换?  填充平均值,中位数
    movie['Revenue (Millions)'].fillna(movie['Revenue (Millions)'].mean(), inplace=True)
    
    movie['Metascore'].fillna(movie['Metascore'].mean(), inplace=True)
    

    4 不是缺失值nan,有默认标记的

    数据是这样的:

    wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data")
    

    处理思路分析:

    • 先替换‘?’为np.nan

    df.replace(to_replace=, value=)
    • 在进行缺失值的处理

    # 把一些其它值标记的缺失值,替换成np.nan
    wis = wis.replace(to_replace='?', value=np.nan)
    
    wis.dropna()
    展开全文
  • 主要给大家介绍了关于Python Pandas缺失值的处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Python Pandas具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 下面小编就为大家分享一篇Python Pandas找到缺失值的位置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • pandas缺失值处理

    2020-12-28 17:11:51
    pandas缺失值处理前言一、isnull()二、notnull()三、dropna()四、fillna()总结 前言 当我们在处理数据时,总会遇到数值缺失的问题,pandas在处理缺失值的方面提供了很全面的方法,主要包括:isnull()——找出缺失...


    前言

    当我们在处理数据时,总会遇到数值缺失的问题,pandas在处理缺失值的方面提供了很全面的方法,主要包括:isnull()——找出缺失值;notnull()——找出非缺失值;dropna()——剔除缺失值;fillna()——填充缺失值。具体使用方法请往下看。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、isnull()

    isnull()用来找出缺失值的位置,返回一个布尔类型的掩码标记缺失值,下面是案例:

    import pandas as pd
    import numpy as np
    data = pd.DataFrame({'name':['Verne Raymond',np.nan,'Patrick George','Saxon MacArthur'],'age':[18,np.nan,21,None]})
    data
    
                  name   age
    0    Verne Raymond  18.0
    1              NaN  NaN
    2   Patrick George  21.0
    3  Saxon MacArthur   NaN
    

    这里我们可以看到不管我们创建DataFrame时控制用的是np.nan还是None,创建后都会变成NaN。

    data.isnull()
    
        name    age
    0  False  False
    1   True   True
    2  False  False
    3  False   True
    

    二、notnull()

    notnull()与isnull()正好相反,是找出非空值并用布尔值进行标记,下面是例子:

    data.notnull()
    
        name    age
    0   True   True
    1  False  False
    2   True   True
    3   True  False
    

    三、dropna()

    dropna()就是字面意思,丢掉缺失值。

    DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)

    参数:
    axis:默认为0,表示删除行还是列,也可以用“index”和“columns”表示
    how:{‘any’, ‘all’}, 默认为 ‘any’;any表示只要该行(列)出现空值就删除整行(列),all表示整行(列)都出现空值才会删除整行(列)
    thresh:表示删除非空值小于thresh个数时删除
    subset:列表类型,表示哪些列里有空值才删除行或列
    inplace:与其他函数的inplace一样,表示是否覆盖原DataFrame

    下面是例子:

    data.dropna(axis=1,thresh=3)
    
                  name
    0    Verne Raymond
    1              NaN
    2   Patrick George
    3  Saxon MacArthur
    
    data.dropna(axis=0,how='all')
    
                  name   age
    0    Verne Raymond  18.0
    2   Patrick George  21.0
    3  Saxon MacArthur   NaN
    
    data.dropna(subset = ['name'])
    
                  name   age
    0    Verne Raymond  18.0
    2   Patrick George  21.0
    3  Saxon MacArthur   NaN
    

    四、fillna()

    fillna()的作用是填充缺失值
    DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

    参数:

    • value:设置用于填充DataFrame的值
    • method:默认为None;设置填充DataFrame的方法有:‘backfill’, ‘bfill’, - ‘pad’, ‘ffill’四种,其中‘backfill’和 ‘bfill’是用前面的值填充空缺值,‘pad’和 ‘ffill’是用后面的值填充空缺值
    • axis:填充缺失值所沿的轴,与上文的axis设置方法一样
    • inplace:是否替换原DataFrame,与上文的设置方法一样
    • limit:设置被替换值的数量限制
    • downcast:表示向下兼容转换类型,不常用

    下面是例子:

    data.fillna(0)
    
                  name   age
    0    Verne Raymond  18.0
    1                0   0.0
    2   Patrick George  21.0
    3  Saxon MacArthur   0.0
    
    data.fillna(method='ffill')
    
                  name   age
    0    Verne Raymond  18.0
    1    Verne Raymond  18.0
    2   Patrick George  21.0
    3  Saxon MacArthur  21.0
    
    展开全文
  • 主要介绍了Python3.5 Pandas模块缺失值处理和层次索引,结合实例形式详细分析了Python3.5 Pandas模块缺失值处理和层次索引的原理、处理方法及相关操作注意事项,需要的朋友可以参考下
  • Pandas处理缺失值

    2020-07-28 11:35:11
    07.Pandas处理缺失值 Pandas使用这些函数处理缺失值: isnull和notnull:检测是否是空值,可用于df和series dropna:丢弃,删除缺失值 [axis:](删除行还是列,{0 or ‘index’,1or ‘columns’},default 0)删除行...
  • 今天小编就为大家分享一篇对Pandas DataFrame缺失值的查找与填充示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 数据预处理+缺失值处理方案+Missing Value+pandas+缺失值填充方法、方案.pdf
  • pandas数据缺失值处理

    2021-04-11 11:43:39
    pandas数据缺失值处理 import pandas as pd from numpy import NaN import numpy as np df = pd.DataFrame([[1,None,NaN],[1,1,NaN],[NaN,None,NaN],[0,None,NaN]]) print(df,"\n") #判断是否是空值,缺失值(None...
  • Pandas | 缺失值处理

    2020-12-11 19:10:08
    Pandas缺失值处理 文章目录Pandas缺失值处理前言一、判断缺失值二、处理缺失值利用sklearn工具填充缺失值总结前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键...
  • pandas填补缺失值的方法

    千次阅读 2020-02-17 09:12:50
    pandas填补缺失值的方法 在处理数据的过程中,经常会遇到原数据部分内容的缺失,为了保证我们最终数据统计结果的正确性,通常我们有两种处理方式,第一种就是删除掉这些部分缺失的数据;第二种就是填补这些缺失的...
  • Pandas处理缺失值 如何发现缺失值 #Pandas数据结构有两种方法可以有效的发现缺失值 #isnull()方法 import pandas as pd import numpy as np df = pd.DataFrame([[1, np.nan, 2], [2, 3, 5], [np...
  • pandas统计缺失值的个数

    千次阅读 2020-12-11 22:01:17
    pandas 统计缺失值个数,可以使用 df['whole_post_clean'].isnull().sum()
  • pandas缺失值

    2021-03-30 08:22:49
    文章目录pandas缺失值1、选择缺失值的方法:掩码和标签值2、pandas的缺失值3、None:python中的None对象4、NaN:数据类型的缺失值5、NaN和None的差异pandas处理缺失值 pandas缺失值 1、选择缺失值的方法:掩码和标签...
  • pandas统计缺失值

    2021-04-15 09:58:05
    # 查看每列是否有缺失值 data.isnull().any() Survived False Pclass False Sex False Age True SibSp False Parch False Fare False Embarked True dtype: bool # 统计列缺失值的数量 data.isnull().sum() ...
  • 许多原始数据集中会包含缺失值,这里总结一下常见的对缺失值的处理方式,以及如何通过pandas进行实际操作。 生成一个包含缺失值的DataFrame 通过如下代码,可以构造一个包含缺失值的DataFrame。这里用到一个小技巧,...
  • Python3.5 Pandas模模块块缺缺失失值值处处理理和和层层次次索索引引实实例例详详解解 这篇文章主要介绍了Python3.5 Pandas模块缺失值处理和层次索引,结合实例形式详细分析了Python3.5 Pandas模 块缺失值处理和层次...
  • python pandas处理缺失值

    千次阅读 2018-03-28 17:22:29
    缺失值:python中显示为NaN,python用np.nan,None表示在简单的运算+-*/中,有缺失值的画,运算结果在相应的位置上也是缺失值在描述性统计sum,mean,min.max等中,NaN都是作为0进行运算操作:判断返回一个含有布尔值...
  • 下面小编就为大家分享一篇python解决pandas处理缺失值为空字符串的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,213
精华内容 11,285
关键字:

pandas查看缺失值