美文网首页
【python】数据清洗

【python】数据清洗

作者: 我写的BUG代码少 | 来源:发表于2020-09-14 15:37 被阅读0次

    1.处理缺失值

    判断是否含缺失值/统计缺失值

    #判断
    ## 判断列是否存在na
    df.isnull().any()  #返回bool
    df.notnull()
    
    #统计
    df.isnull().sum()
    df['col_name'].value_counts(dropna=False) #分类汇总该列并统计缺失值
    

    筛选所有含缺失值的表格

    df[df.col_name.isnull()] 
    

    删除含缺失值的数据

    df.dropna(how = 'any') #只要含有缺失值就删除数据
    df.dropna(how = 'all') #行数据要全部缺失,才会删除该行
    df.dropna(subsey=['col_1','col_2'], how = 'any') #col_1和col_2任意一个含缺失值,则删除改行数据
    df.dropna(subsey=['col_1','col_2'], how = 'all') #两列都含缺失值,删除
    

    用新值填充空值

    #用新值填充缺失值
    df['col_name'].fillna(value = 'new_value',inplace = True)   
    
    #用0填充
    df[''].fillna(value=0) 
    
    #用前值
    df[''].fillna(method='ffill')
    
    #用后值
    df[''].fillna(method='bfill')
    
    #用均值
    df[''].fillna(df[''].mean(),inplace=True)   #inplace=true时,原数据改变,否则不变
    

    对应值替换

    (1)用DataFrame的 loc/iloc
    df tb
    for i in range(len(tb)):
        if np.isnan(tb.loc[i,'value']):       
           tb.loc[i,'value'] = df[tb.loc[i,'weekday']]    #  df.loc[tb.iloc[i,1],0] 
    
    (2)用apply()
    # 或者自己写函数, 用apply()
    
    col= ['weekday','value']
    def func(col):
        weekday = col[0]
        value = col[1]
        if pd.isnull(value):
            if weekday == 'Mon':
                return 4444
            elif weekday == 'Fri':
                return 5555
        else:
            return value
    tb['value'] = tb[col].apply(func, axis = 1)
    

    2.清除某一列的字符空格

    df['']=df[''].map(str.strip)
    

    3.大小写转换

    df['']=df[''].str.lower()
    

    4.更改数据格式

    df['id'].astype('str')
    

    5.修改列名称

    link

    DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)
    '''
    参数:
    mapper, index, columns : 映射的规则。
    axis:指定轴,可以是轴名称('index','columns')或数字(0,1),默认为index。
    copy:布尔值,默认为True,复制底层数据。
    inplace:布尔值,默认为False。指定是否返回新的DataFrame。如果为True,则在原df上修改,返回值为None。
    level:int或level name,默认为None。如果是MultiIndex,只重命名指定级别的标签。
    '''
    
    • 修改列名
    df = df.rename(columns={'gender':'性别','A':'B'})
    
    • 替换列名分割符
    df.columns = df.columns.str.replace('','_')
    

    6.重复值处理

    6.1 查询重复值

    #对某一列
    df.col_name.duplicated()              #返回bool,true>>>前面出现过了
    df.col_name.duplicated().sum()        #总计
    
    #对多列
    df.duplicates(subset= ['col_1','col_2']) 
    
    #对全表
    df.loc[df.duplicated(),:]             #查询含重复值的所有数据
    df.loc[df.duplicated(keep='first'),:] #第一次出先的结果被保留,后面出现的重复对象被筛选出
    df.loc[df.duplicated(keep='last'),:] 
    df.loc[df.duplicated(keep='False'),:] #mark all duplicates
    

    6.2 删除重复值

    #对某一列
    df[''].drop_duplicates()
    df[''].drop_duplicates(keep='last')  #删除前重复值,保留后; keep:first
    
    #对多列
    df.drop_duplicates(subset= ['col_1','col_2'])  #subset 默认none对所有去重;subset自定义列去重
    
    #对全表
    df.drop_duplicates(keep='')
    

    7.数据值替换

    df['education'].replace('本科','大学')
    

    8.删除列/行

    • 列axis=1;行axis=0
    df.drop(['',''],axis=1,inplace=True)
    

    相关文章

      网友评论

          本文标题:【python】数据清洗

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