#處理異常值缺失值重複值資料差分
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(,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
07 20 缺失值處理二 異常值處理
一 刪除法 對於缺失值,一般不會直接進行刪除,因為刪除過多影響資料分析,所以會對其進行第二中操作,補齊 二 填補法 一般適用於 元素 為 float 或者 int的資料 1.均值或 中位數 補齊法 df age 檢視age列df.age.mean 檢視年齡列平均值df.age.fillna df a...
資料處理 缺失值處理 異常值處理
造成資料缺失的原因是多方面的,主要可能有以下幾種 有些資訊暫時無法獲取,致使一部分屬性值空缺出來。有些資訊因為一些人為因素而丟失了。有些物件的某個或某些屬性是不可用的。如乙個未婚者的配偶姓名。獲取這些資訊的代價太大,從而未獲取資料。空值處理的重要性 空值的存在,造成了以下影響 系統丟失了大量的有用資...
python資料清洗(缺失值與異常值處理)
本文寫入的是python資料庫的taob表 source 本地檔案 其中總資料為9616行,列分別為title,link,price,comment檢視資料概括 coding utf 8 author m10 import numpy as np import pandas as pd import...