zoukankan      html  css  js  c++  java
  • pandas中的空值处理

    1.空值

    1.1 有两种丢失数据:

    • None: Python自带的数据类型 不能参与到任何计算中
    • np.nan: float类型 能参与计算,但结果总是nan
    # None+2  # 报错
    # np.nan + 2  # 值仍然是nan

    1.2 np.nan(NaN)

    数组直接运算会得到nan,但可以使用np.nansum()函数来计算nan,此时视nan为0。

    ndarr = np.array([1,2,3,np.nan])
    np.sum(ndarr)
    np.nansum(ndarr)

    Series和DataForm可以直接处理nan

    s1 = Series([1,2,3,np.nan])
    s1
    
    0    1.0
    1    2.0
    2    3.0
    3    NaN
    dtype: float64
    
    s1.sum()
    6.0
    df1 = DataFrame([1,2,3,np.nan])
    df1

    df1.sum()
    0    6.0
    dtype: float64

    1.3 pandas中的None与NaN

    s1 = Series([1,2,3,np.nan,None])  # 
    s1
    
    0    1.0
    1    2.0
    2    3.0
    3    NaN
    4    NaN
    dtype: float64
    df1 = DataFrame([1,2,3,np.nan,None])  # Series和DataFrame都会自动把None转换成NaN 然后 运算的时候会把NaN当成0
    df1

    2. 空值检测与空值处理

    • isnull()
    • notnull()
    • dropna(): 过滤丢失数据
    • fillna(): 填充丢失数据

    2.1 空值检测

    • isnull()
    • notnull()

    用randint创建一个5*5的DataFrame作为例子

    df = DataFrame(data=np.random.randint(0,100,size=(5,5)),columns=list('abcde'))
    df.loc[1,'a'] = np.nan
    df.loc[3,'b'] = np.nan
    df.loc[0,'e'] = np.nan

    isnull配合any使用,可以查看每一行是否存在空值

    可以控制axis改变方向,查看某一列是否存在空值

    2.2 空值过滤

    • dropna()

    可以选择过滤的是行还是列(默认为行)

    df.dropna()  # 默认 保留没有空值的行

    也可以选择过滤的方式 how = 'all',代表全部为空则删除

    2.3 空值填充

    • fillna()

    # value=None 默认情况
    df.fillna(value=50)

    也可以选择从前面找值来填充还是从后面找值来填充

    # method指的是 如何对空值进行填充
    # 'bfill'从后面找值来填充 ffill从前面找值来填充
    # df.fillna(method='bfill')
    # df.fillna(method='ffill') # 默认是纵向(从相邻样本的 同一特征中找值)

    # df.fillna(method='bfill',axis=0) # 竖向
    df.fillna(method='bfill',axis=1) # 横向

    还可以限定最多填充几个连续的NaN

    df.fillna(method='bfill',limit=1,inplace=True)  # 用来限制填充多少个

    fillna()方法总结:

    # value=None, method=None, axis=None, inplace=False, limit=None
    # value直接指定 用什么值来填充
    # method 指定填充方法
    # axis 指定填充值的方向
    # inplace 指的是是否对原df进行替换
    # limit 限制填充的个数
    df.fillna()
  • 相关阅读:
    wpf随笔
    XGrid绑定(转)
    SQL Server 批量插入数据的两种方法(转)
    UdpClient的Connect究竟做了什么(转)
    InvokeHelper,让跨线程访问/修改主界面控件不再麻烦(转)
    [C#] Control.Invoke方法和跨线程访问控件
    多线程访问winform控件出现异常的解决方法
    http://www.jdon.com/mda/oo_relation.html
    三范式浅析(转)
    SQL 表锁(转)
  • 原文地址:https://www.cnblogs.com/louyifei0824/p/9942430.html
Copyright © 2011-2022 走看看