knowmore0 2020-05-07
# 处理异常值缺失值重复值数据差分 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:\Users\lenovo\Desktop\总结\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
Series是一种类似于一维数组的对象,由一组数据以及一组与之对应的索引组成。 index: 索引序列,必须是唯一的,且与数据的长度相同. 如果没有传入索引参数,则默认会自动创建一个从0~N的整数索引