• pandas_处理异常值缺失值重复值数据差分


    # 处理异常值缺失值重复值数据差分
    import pandas as pd
    import numpy as np
    import copy
    
    # 设置列对齐
    pd.set_option("display.unicode.ambiguous_as_wide",True)
    pd.set_option("display.unicode.east_asian_width",True)
    
    # 异常值
    
    # 读取工号姓名时段交易额,使用默认索引
    dataframe = pd.read_excel(r'C:UserslenovoDesktop总结Python超市营业额.xlsx')
    
    # 查看交易额低于 2000 的三条数据
    # dataframe[dataframe.交易额 < 2000]
    dataframe[dataframe.交易额 < 2000][:3]
    '''
       工号  姓名      日期         时段  交易额    柜台
    1  1002  李四  20190301  14:00-21:00    1800  化妆品
    2  1003  王五  20190301   9:00-14:00     800    食品
    3  1004  赵六  20190301  14:00-21:00    1100    食品
    '''
    # 查看上浮了 50% 之后依旧低于 1500 的交易额,查看 4 条数据
    dataframe.loc[dataframe.交易额 < 1500,'交易额'] = dataframe[dataframe.交易额 < 1500]['交易额'].map(lambda num:num*1.5)
    dataframe[dataframe.交易额 < 1500][:4]
    '''
        工号  姓名      日期         时段  交易额      柜台
    2   1003  王五  20190301   9:00-14:00  1200.0      食品
    4   1005  周七  20190301   9:00-14:00   900.0    日用品
    5   1006  钱八  20190301  14:00-21:00  1050.0    日用品
    6   1006  钱八  20190301   9:00-14:00  1275.0  蔬菜水果
    '''
    # 查看交易额大于 2500 的数据
    dataframe[dataframe.交易额 > 2500]
    '''
    Empty DataFrame
    Columns: [工号, 姓名, 日期, 时段, 交易额, 柜台]
    Index: []
    '''
    # 查看交易额低于 900 或 高于 1800 的数据
    dataframe[(dataframe.交易额 < 900)|(dataframe.交易额 > 1800)]
    '''
        工号  姓名      日期        时段  交易额    柜台
    0   1001  张三  20190301  9:00-14:00  2000.0  化妆品
    8   1001  张三  20190302  9:00-14:00  1950.0  化妆品
    12  1005  周七  20190302  9:00-14:00   870.0  日用品
    16  1001  张三  20190303  9:00-14:00  1950.0  化妆品
    '''
    #  将所有低于 200 的交易额都替换成 200
    dataframe.loc[dataframe.交易额 < 200,'交易额'] = 200
    
    # 查看低于 1500 的交易额个数
    dataframe.loc[dataframe.交易额 < 1500,'交易额'].count()
    # 9
    
    # 将大于 3000 元的都替换为 3000 元
    dataframe.loc[dataframe.交易额 > 3000,'交易额'] = 3000
    
    # 缺失值
    
    # 查看有多少行数据
    len(dataframe)
    # 17
    
    # 丢弃缺失值之后的行数
    len(dataframe.dropna())
    # 17
    
    # 包含缺失值的行
    dataframe[dataframe['交易额'].isnull()]
    '''
    Empty DataFrame
    Columns: [工号, 姓名, 日期, 时段, 交易额, 柜台]
    Index: []
    '''
    # 使用固定值替换缺失值
    # dff = copy.deepcopy(dataframe)
    # dff.loc[dff.交易额.isnull(),'交易额'] = 999
    # 将缺失值设定为 999
    # dff.iloc[[1,4,17],:]
    
    # 使用交易额的均值替换缺失值
    # dff = copy.deepcopy(dataframe)
    # for i in dff[dff.交易额.isnull()].index:
    #     dff.loc[i,'交易额'] = round(dff.loc[dff.姓名 == dff.loc[i,'姓名'],'交易额'].mean())
    # dff.iloc[[1,4,17],:]
    
    # 使用整体均值的 80% 填充缺失值
    # dataframe.fillna({'交易额':round(dataframe['交易额'].mean() * 0.8)},inplace = True)
    # dataframe.iloc[[1,4,16],:]
    
    
    # 重复值
    dataframe[dataframe.duplicated()]
    '''
    Empty DataFrame
    Columns: [工号, 姓名, 日期, 时段, 交易额, 柜台]
    Index: []
    '''
    # dff = dataframe[['工号','姓名','日期','交易额']]
    # dff = dff[dff.duplicated()]
    # for row in dff.values:
    #     df[(df.工号 == row[0]) & (df.日期 == row[2]) &(df.交易额 == row[3])]
    
    
    # 丢弃重复行
    dataframe = dataframe.drop_duplicates()
    
    # 查看是否有录入错误的工号和姓名
    dff = dataframe[['工号','姓名']]
    dff.drop_duplicates()
    '''
       工号  姓名
    0  1001  张三
    1  1002  李四
    2  1003  王五
    3  1004  赵六
    4  1005  周七
    5  1006  钱八
    '''
    
    # 数据差分
    # 查看员工业绩波动情况(每一天和昨天的数据作比较)
    dff = dataframe.groupby(by = '日期').sum()['交易额'].diff()
    '''
    日期
    20190301       NaN
    20190302    1765.0
    20190303   -9690.0
    Name: 交易额, dtype: float64
    '''
    dff.map(lambda num:'%.2f'%(num))[:5]
    '''
    日期
    20190301         nan
    20190302     1765.00
    20190303    -9690.00
    Name: 交易额, dtype: object
    '''
    # 数据差分
    # 查看张三的波动情况
    dataframe[dataframe.姓名 == '张三'].groupby(by = '日期').sum()['交易额'].diff()[:5]
    '''
    日期
    20190301      NaN
    20190302    850.0
    20190303   -900.0
    Name: 交易额, dtype: float64
    '''

    2020-05-07

  • 相关阅读:
    while循环
    三元运算符
    switch用法
    if判断
    位运算
    逻辑运算符
    赋值运算符和比较运算符
    算术运算符
    数据类型的转换
    线程同步之(条件变量)
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12844851.html
Copyright © 2020-2023  润新知