pandas 處理異常值缺失值重複值資料差分

2022-06-19 11:57:13 字數 4277 閱讀 4193

#

處理異常值缺失值重複值資料差分

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...