# author:nimo_ding
'''資料分析師的資料清洗佔據了80%的時間。
沒有高質量的資料,就沒有高質量的資料探勘,而清洗是高質量資料的一道保障。
養成資料審核的習慣非常重要。
資料清洗規則:
完全合一
完整性:單條資料是否存在空值,統計的字段是否完善。
全面性:觀察某一列的全部數值,看平均值 最大值 最小值來判斷該列是否有問題。比如資料定義 單位標識 數值本身。
合法性:資料型別 內容 大小的合法性,比如資料中存在非ascii字元,性別存在了未知,年齡超過120歲等。
唯一性:資料是否存在重覆記錄
# fillna 後面inplace引數的取值:true、false
# true:直接修改原物件
# false:建立乙個副本,修改副本,原物件不變(預設預設)
'''print('\n# 1、完整性')
# 缺失值
# 年齡體重缺失,由於資料量較大,這些數值沒有被採集到,通常我們有三種解決方法:
# 刪除資料缺失的記錄
# 使用當前列的均值代替
# 使用當前列出現頻率最高的資料代替。
import numpy as np
import pandas as pd
from pandas import series,dataframe
data =
df=dataframe(data,
columns=['name','age'])
df.loc[0,'age']=34 # 使得第一行第二行的age相等。
print(df)
'''結果:
name age
0 nimo 34.0
1 jack 34.0
2 ross 45.0
3 zijie nan
'''print('\n# 用平均年齡填充:')
# df['age'].fillna(df['age'].mean(),inplace=true)
print('\n# 用最高頻的資料進行填充,value_counts對每個值進行計數,index第1個就是最高頻的。')
age_maxf=df['age'].value_counts().index[0]
df['age'].fillna(age_maxf,inplace=true)
print(df)
'''結果:
name age
0 nimo 34.0
1 jack 34.0
2 ross 45.0
3 zijie 34.0
'''print('# 處理全空的空列')
df['test']=np.nan
print(df)
# 結果:
# name age test
# 0 nimo 34.0 nan
# 1 jack 34.0 nan
# 2 ross 45.0 nan
# 3 zijie 34.0 nan
df=df.dropna(axis=1)
print(df)
'''結果:
name age
0 nimo 34.0
1 jack 34.0
2 ross 45.0
3 zijie 34.0
'''print('\n# 2、全面性')
print('\n# 問題:列資料weight的單位不統一:kgs\lbs')
df=dataframe()
print(df)
'''結果:
num name age weight
0 1.0 nimo ding 23.0 70kgs
1 2.0 jack wang 34.0 154lbs
2 3.0 ross li nan none
3 4.0 zijie t 45.0 78kgs
4 5.0 hello k 34.0 189lbs
5 nan none nan none
6 6.0 world 45.0 67kgs
7 7.0 hi 65.0 45kgs
'''print('\n# 獲取weight資料列中單位為lbs的資料')
row_with_lbs=df['weight'].str.contains('lbs').fillna(false)
print(df[row_with_lbs])
# 結果為:
# num name age weight
# 1 2.0 jack wang 34.0 154lbs
# 4 5.0 hello k 34.0 189lbs
# 將單位磅lbs轉化為千克kgs:
for i,lbs_row in df[row_with_lbs].iterrows():
weight=int(float(lbs_row['weight'][:-3])/2.2)
df.at[i,'weight']='{}.kgs'.format(weight)
print(df)
print('\n# 3、合理性:包含了非ascii字元,刪除或替換掉。我的例子中好像沒有?')
df['name'].replace(,regex=true,inplace=true)
print('\n# 4、唯一性')
# 問題:一列有多個引數,name列可以拆分為firstname和lastname
# 拆分之後再將name列刪除
df[['firstname','lastname']]=df['name'].str.split(expand=true)
df.drop('name',axis=1,inplace=true)
print(df)
# 結果:
# num age weight firstname lastname
# 0 1.0 23.0 70kgs nimo ding
# 1 2.0 34.0 70.kgs jack wang
# 2 3.0 nan none ross li
# 3 4.0 45.0 78kgs zijie t
# 4 5.0 34.0 85.kgs hello k
# 5 nan nan none none none
# 6 6.0 45.0 67kgs world none
# 7 7.0 65.0 45kgs hi none
# 問題:重複資料
# 刪除
df.drop_duplicates(['firstname','lastname'],inplace=true)
print('\n# 作業:如下美食資料請做清洗')
# ounces盎司 重量
df=dataframe()
print(df)
# 結果:
# food ounces animal
# 0 bacon 4.0 pig
# 1 pulled pork 3.0 pig
# 2 bacon nan pig
# 3 pastrami 6.0 cow
# 4 corned beef 7.5 cow
# 5 bacon 8.0 pig
# 6 pastrami -3.0 cow
# 7 honey ham 5.0 pig
# 8 nova lox 6.0 salmon
print('\n# 1、全面性:food統一變成小寫')
df['food']=df['food'].str.lower()
print(df)
print('\n# 2、唯一性:刪除重複行') # 可放到最後一步驟
df.drop_duplicates()
print(df)
print('\n# 3、合法性,將ounces中負值刪除')
print(df[df['ounces']<0].index)
df=df.drop(df[df['ounces']<0].index)
print(df)
# df=df[df['ounces']>0] # 保留ounces>0的資料
print('\n# 4、完整性,將nan值替換成平均值')
df['ounces'].fillna(round(df['ounces'].mean(),1),inplace=true)
print(df)
# 最後將索引重新生成
df=df.reset_index(drop=true)
print(df)
R的清洗工作
find columns with na or nan tran is the dataframe name find completed obs.w all variables tran.comp class and statistics value of the dataset in overa...
資料清洗之資料清洗概述
從廣泛的意義上來講,資料是乙個寬泛的概念,包括但不限於 我們要了解資料清洗,就需理解資料的內涵和外延 常見的資料有 其中,比較重要比較常見的分析資料是 資料。這裡重點介紹一些關於 資料的內容。資料 資料物件由屬性 attributes 及其值 value 構成 資料的特徵 什麼是資料清洗 資料清洗是...
excel資料清洗 資料清洗excel
資料清洗與加工 目的 獲得具備準確性 完整性和一致性符合分析質量的資料。資料處理第一步 資料清洗 1 資料去重 方式1 刪除重複項功能。適用於有重複項出現的列,並且這樣的重複無意義,比如標識列。操作 資料 選項卡下的 刪除重複值 按鈕 方式2 排序刪除重複項。適用於需要人工判斷無用重複項的資料,即將...