美文网首页
06.基于pandas的数据清洗

06.基于pandas的数据清洗

作者: 一直流浪 | 来源:发表于2023-04-05 10:15 被阅读0次

    6、基于pandas的数据清洗

    1、丢失的数据

    • 有两种丢失数据:
      • None
      • np.nan(NaN)
    • 两种丢失数据的区别
      • type(None) # None是对象类型
      • type(np.nan) # NAN 是浮点型

    (1)为什么在数据分析中需要用到的是浮点类型而不是对象类型?

    • 数据分析中会常常使用某些形式的运算来处理原始数据,如果原数据的空值为NAN类型,则不会干扰或者中断运算。
    • NAN可用参加运算的
    • None 是不可以参加运算的
    • 在pandas中如果遇到了None类型的空值,pandas会自动将其转换为 Nan.

    2、pandas处理空值操作

    (1)导入相关包

    import pandas as pd
    from pandas import DataFrame,Series
    

    (2)伪造一组数据(存在空值,在pandas中如果遇到了None类型的空值,pandas会自动将其转换为 Nan.

    df = DataFrame(data=np.random.randint(0,100,size=(8,6)))
    df.iloc[2,3] = None
    df.iloc[3,4] = None
    df.iloc[5,3] = None
    df
    
    image.png

    2.1 方式一:对空值进行过滤

    • 技术:isnull,notnull,any,all

    (1)isnull()判断元素是否为空,notnull()判断元素是否不为空

    df.isnull()
    
    image.png
    df.notnull()
    
    image.png

    (2) any:用来检测行或者列中是否存在True。

    # 那些行中存在true.
    # any:用来检测行或者列中是否存在True
    df.isnull().any(axis=1)
    # 将上面的boolean 值作为行索引
    drop_index = df.loc[df.isnull().any(axis=1)].index   #即将要删除的行索引
    df.drop(labels=drop_index,axis=0)
    

    (3)all:用来检测行或者列中是否全部为True

    # 找到不存在null的行
    df.notnull().all(axis=1)
    # 将boolean值作为行索引
    df.loc[df.notnull().all(axis=1)]
    
    image.png

    (4)总结:

    规律:

    • isnull --> any
    • notnull --> all

    2.2 方式二:将缺失的行或者列进行删除

    dropna:可以直接将缺失的行或者列进行删除

    df.dropna(axis = 0)   # 0代表行,1代表列
    
    image.png

    2.3 方式三:对缺失值进行覆盖

    fillna对缺失值进行覆盖

    df.fillna(value=666)   # 用666填充空值
    
    image.png

    使用周围的数据进行填充

    df.fillna(method='ffill',axis=1) #使用水平方向的向前填充
    df.fillna(method='bfill',axis=1) #使用水平方向的向后填充
    df.fillna(method='ffill',axis=0) #使用竖直方向的向前填充
    df.fillna(method='bfill',axis=0) #使用竖直方向的向后填充
    
    image.png

    3、处理重复数据

    (1) 生成一组带有重复数据的数据源(重复的行数据)

    df = DataFrame(data=np.random.randint(0,100,size=(8,4)))
    df.iloc[1] = df.iloc[5]
    df.iloc[3] = df.iloc[6]
    df
    
    image.png

    (2)使用drop_duplicates 处理重复数据

    # 使用drop_duplicates    
    df.drop_duplicates(keep='first')  # keep = 'first' 只保存第一次出现的重复行
    df.drop_duplicates(keep='last')   # keep = 'last'  只保存最后一次出现的重复行
    df.drop_duplicates(keep=False)   # keep = False  删除所有的重复行
    

    4、处理异常数据

    • 自定义一个1000行3列(A,B,C)取值范围为0-1的数据源,然后将C列中的值大于其两倍标准差的异常值清洗
    df=DataFrame(data=np.random.random(size=(1000,3)),columns=['A','B','C'])
    df
    
    image.png

    (1)判定异常值的条件

    # 判定异常值的条件 
    temp = df['C'].std()*2
    df['C'] > temp
    

    (2)对有异常值的行进行删除

    df.loc[~(df['C'] > temp)]
    
    image.png

    相关文章

      网友评论

          本文标题:06.基于pandas的数据清洗

          本文链接:https://www.haomeiwen.com/subject/tfiqwrtx.html