pandas的数据清洗和准备

    科技2022-07-11  94

    1. 处理缺失数值

    string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado']) # np.nan为空数值 string_data string_data[0] = None # None也可以判为空 string_data.isnull() # 对空数值判断

    1.1 过滤缺失值

    对于Series来说,直接通过series.dropna()对于DataFrame,frame.dropna()会删除含有NaN的行,axis=1即可改为丢弃列,默认how = 'any'通过thresh = 2仅删除超过包含两个非NaN的行或列,df.dropna(thresh = 2)inplace = True 就地删除,返回空

    1.2 填充缺失数据

    df.fillna(0) 通过0替换缺失值df.fillna( {1:0.5, 2:0} ),字典调用,对不同列填充不同数据df.fillna( method='ffill', limit = 2 ) 自动复制上一个数填充,如果第一个为空则后一个填充也为空,限制limit为2个

    2. 数据转换

    2.1 移除重复数据

    df.duplicated() 重复的行会Truedf.drop_duplicates( ['k1', 'k2'] ) 根据某几列或一列判定是否重复并移除重复的,默认为匹配所有列,保留第一个重复的

    2.2 利用函数或映射进行数据转换

    data['animal'] = lowercased.map(meat_to_animal) 其中lowercased是DataFrame和 meat_to_animal字典的索引 对应数值形成成一列

    2.3 替换某些数值为默认值

    data.replace(-999, np.nan)单一替换,替换数值为-999的为NaNdata.replace([-999, -1000], np.nan) 多对一data.replace({-999: np.nan, -1000: 0})多对多

    2.4 对轴索引修改

    transform = lambda x: x[:4].upper(), data.index = data.index.map(transform)对轴索引映射修改data.rename(index=str.title, columns=str.upper)直接通过rename修改data.rename(index={'OHIO': 'INDIANA'}, columns={'three': 'peekaboo'} , inplace=True)就地修改

    2.5 离散数据的统计划分

    数据统计划分,根据区间划分,默认左开右闭(通过right=False修改为左闭右开),bins = [18, 25, 35, 60, 100] ,cats = pd.cut(ages, bins)将age划分成多个年龄段对于cut划分的结果cats属性有:cats.codes将每个具体的值转化为第几个类别[0 0 0 1 0 0 2 1 3 2 2 1], cats.categories属性显示划分的种类区间, pd.value_counts(cats)属性显示分类统计的结果对分属类别命名label = group_names:group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior'], pd.cut(ages, bins, labels=group_names)等分数据,设置精确度precision=2:pd.cut(data, 4, precision=2)

    2.6 对超出范围的数据修改

    data = pd.DataFrame(np.random.randn(1000, 4))查看数据基本信息: data.describe()查找某列中绝对值⼤⼩超过3的值:col = data[2], col[np.abs(col) > 3]设置any(1)则各行中某列存在绝对值大于3即可 data[(np.abs(data) > 3).any(1)]np.sign(data)将数据正的转为1,负的转为-1
    Processed: 0.028, SQL: 8