三個Python常用的數(shù)據(jù)清洗處理方式總結(jié)
關(guān)于python數(shù)據(jù)處理過程中三個主要的數(shù)據(jù)清洗說明,分別是缺失值/空格/重復(fù)值的數(shù)據(jù)清洗。
這里還是使用pandas來獲取excel或者csv的數(shù)據(jù)源來進行數(shù)據(jù)處理。若是沒有pandas的非標(biāo)準(zhǔn)庫需要使用pip的方式安裝一下。
pip?install?pandas
準(zhǔn)備一下需要處理的臟數(shù)據(jù),這里選用的是excel數(shù)據(jù),也可以選擇其他的格式數(shù)據(jù),下面是源數(shù)據(jù)截圖。

使用pandas的read_excel()函數(shù)讀取出我們需要處理的data.xlsx文件。
#?Importing?the?pandas?library?and?giving?it?an?alias?of?pd.
import?pandas?as?pd
#?Reading?the?excel?file?and?storing?it?in?a?variable?called?`result_`
result_?=?pd.read_excel('D:/test/data.xlsx')
#?Printing?the?dataframe.
print(result_)
注意,若是新的python環(huán)境直接安裝pandas模塊后執(zhí)行上面的讀取excel數(shù)據(jù)代碼可能會出現(xiàn)沒有openpyxl模塊的情況。
這時候,我們使用pip的方式再次安裝一下openpyxl即可。
pip?install?openpyxl
完成后再次執(zhí)行讀取excel數(shù)據(jù)的代碼塊會成功的返回結(jié)果。
#???????????姓名????年齡????班級???成績?表現(xiàn) #?0???Python?集中營??10??1210???99??A #?1???Python?集中營??11??1211??100??A #?2???Python?集中營??12??1212??101??A #?3???Python?集中營??13??1213??102??A #?4???Python?集中營??14??1214??103??A #?5???Python?集中營??15??1215??104??A #?6???Python?集中營??16??1216??105??A #?7???Python?集中營??17??1217??106??A #?8???Python?集中營??18??1218??107??A #?9???Python?集中營??19??1219??108??A #?10??Python?集中營??20??1220??109??A #?11??Python?集中營??21??1221??110??A #?12??Python?集中營??22??1222??111??A #?13??Python?集中營??23??1223??112??A #?14??Python?集中營??24??1224??113??A #?15??Python?集中營??25??1225??114??A #?16??Python?集中營??26??1226??115??A #?17??Python?集中營??27??1227??116??A #?18??Python?集中營??28??1228??117??A # #?Process?finished?with?exit?code?0
準(zhǔn)備好數(shù)據(jù)源之后,我們使用三個方式來完成對源數(shù)據(jù)的數(shù)據(jù)清洗。
1. strip函數(shù)清除空格
首先,將所有的列名稱提取出來,使用DataFrame對象的columns函數(shù)進行提取。
#?Extracting?the?column?names?from?the?dataframe?and?storing?it?in?a?variable?called?`columns_`. columns_?=?result_.columns.values #?Printing?the?column?names?of?the?dataframe. print(columns_) #?['??姓名??'?'年齡'?'班級'?'成績'?'表現(xiàn)']
從列名稱的打印結(jié)果發(fā)現(xiàn)'姓名'這一列是存在空格的,我們直接查找列名稱是找不到的,因為需要對列名稱的空格進行數(shù)據(jù)清洗。
為了減少代碼塊的使用,我們這里直接使用列表推導(dǎo)式的方式對列名稱的空格進行清洗。
#?A?list?comprehension?that?is?iterating?over?the?`columns_`?list?and?stripping?the?whitespaces?from?each?element?of?the #?list. result_.columns?=?[column_name.strip()?for?column_name?in?columns_] #?Printing?the?column?names?of?the?dataframe. print(result_.columns.values) #?['姓名'?'年齡'?'班級'?'成績'?'表現(xiàn)']
經(jīng)過數(shù)據(jù)清洗后,發(fā)現(xiàn)所有的列名稱空格情況已經(jīng)被全部清洗了。若是存在某個列中的值空格需要清洗也可以采用strip函數(shù)進行清洗。
2. duplicated函數(shù)清除重復(fù)數(shù)據(jù)
關(guān)于重復(fù)數(shù)據(jù)的判斷有兩種情況,一種是兩行完全相同的數(shù)據(jù)即為重復(fù)數(shù)據(jù)。另外一種則是部分相同指的是某個列的數(shù)據(jù)是相同的需要清洗。
#?The?`duplicated()`?function?is?returning?a?boolean?series?that?is?True?if?the?row?is?a?duplicate?and?False?if?the?row?is #?not?a?duplicate. repeat_num?=?result_.duplicated().sum() #?Printing?the?number?of?duplicate?rows?in?the?dataframe. print(repeat_num) #?1
通過上面的duplicated().sum()函數(shù)得到的是兩個完全相同的數(shù)據(jù)行是多少。
接著則可以對源數(shù)據(jù)進行實際意義上的刪除,使用DataFrame對象的drop_duplicates函數(shù)進行刪除。
#?The?`drop_duplicates()`?function?is?dropping?the?duplicate?rows?from?the?dataframe?and?the?`inplace=True`?is #?modifying?the?dataframe?in?place. result_.drop_duplicates(inplace=True) #?Printing?the?dataframe. print(result_) #????????????姓名??年齡????班級???成績?表現(xiàn) #?0???Python?集中營??10??1210???99??A #?1???Python?集中營??11??1211??100??A #?2???Python?集中營??12??1212??101??A #?3???Python?集中營??13??1213??102??A #?4???Python?集中營??14??1214??103??A #?5???Python?集中營??15??1215??104??A #?6???Python?集中營??16??1216??105??A #?7???Python?集中營??17??1217??106??A #?8???Python?集中營??18??1218??107??A #?9???Python?集中營??19??1219??108??A #?10??Python?集中營??20??1220??109??A #?11??Python?集中營??21??1221??110??A #?12??Python?集中營??22??1222??111??A #?13??Python?集中營??23??1223??112??A #?14??Python?集中營??24??1224??113??A #?15??Python?集中營??25??1225??114??A #?16??Python?集中營??26??1226??115??A #?17??Python?集中營??27??1227??116??A
因為最后一行和第一行的數(shù)據(jù)是完全相同的,因此最后一行的數(shù)據(jù)已經(jīng)被清洗掉了。
一般在數(shù)據(jù)清洗刪除重復(fù)值之后需要重置索引,避免索引產(chǎn)生不連續(xù)性。
#?The?`range(result_.shape[0])`?is?creating?a?list?of?numbers?from?0?to?the?number?of?rows?in?the?dataframe. result_.index?=?range(result_.shape[0]) #?The?`print(result_.index)`?is?printing?the?index?of?the?dataframe. print(result_.index) #?RangeIndex(start=0,?stop=18,?step=1)
3. 數(shù)據(jù)缺失值補全
一般查看DataFrame數(shù)據(jù)對象的缺失值就是通過使用isnull函數(shù)來提取所有數(shù)據(jù)缺失的部分。
#?The?`isnull()`?function?is?returning?a?boolean?series?that?is?True?if?the?value?is?missing?and?False?if?the?value #?is?not?missing. sul_?=?result_.isnull() #?The?`print(sul_)`?is?printing?the?boolean?series?that?is?True?if?the?value?is?missing?and?False?if?the?value?is?not #?missing. print(sul_) #????????姓名?????年齡?????班級?????成績?????表現(xiàn) #?0???False??False??False??False??False #?1???False??False??False??False??False #?2???False??False??False??False??False #?3???False??False??False??False??False #?4???False??False??False??False??False #?5???False??False??False??False??False #?6???False??False??False??False??False #?7???False??False??False??False??False #?8???False??False??False??False??False #?9???False??False??False??False??False #?10??False??False??False??False??False #?11??False??False??False??False??False #?12??False??False??False??False??False #?13??False??False??False??False??False #?14??False??False??False??False??False #?15??False??False??False??False??False #?16??False??False??False??False??False #?17??False??False??False??False??False
返回的每一個單元格數(shù)據(jù)結(jié)果為False則代表這個單元格的數(shù)據(jù)是沒有缺失的,或者也可以使用notnull來反向查看。
使用isnull函數(shù)不想顯示很多的列表數(shù)據(jù)時,可以使用sum函數(shù)進行統(tǒng)計。
#?The?`isnull_sum?=?result_.isnull().sum()`?is?returning?a?series?that?is?the?sum?of?the?boolean?series?that?is?True?if #?the?value?is?missing?and?False?if?the?value?is?not?missing. isnull_sum?=?result_.isnull().sum() #?The?`isnull_sum?=?result_.isnull().sum()`?is?returning?a?series?that?is?the?sum?of?the?boolean?series?that?is?True?if #?the?value?is?missing?and?False?if?the?value?is?not?missing. print(isnull_sum) #?姓名????0 #?年齡????0 #?班級????0 #?成績????0 #?表現(xiàn)????0 #?dtype:?int64
通過isnull函數(shù)處理后使用sum函數(shù)進行統(tǒng)計,統(tǒng)計后會返回每一列的數(shù)據(jù)單元格為空的個數(shù)。
接下來就是數(shù)據(jù)值的填補過程,通常可以篩選每一列中的空值填補固定的數(shù)據(jù)。
#?The?`result_.loc[result_.姓名.isnull(),?'姓名']`?is?returning?a?series?that?is?the?values?of?the?column?`姓名` #?where?the?values?are?missing.?The?`'Python?集中營'`?is?the?value?that?is?being?assigned?to?the?series. result_.loc[result_.姓名.isnull(),?'姓名']?=?'Python?集中營' #?Printing?the?dataframe. print(result_) #?????????????姓名??年齡????班級???成績?表現(xiàn) #?0???Python?集中營??10??1210???99??A #?1???Python?集中營??11??1211??100??A #?2???Python?集中營??12??1212??101??A #?3???Python?集中營??13??1213??102??A #?4???Python?集中營??14??1214??103??A #?5???Python?集中營??15??1215??104??A #?6???Python?集中營??16??1216??105??A #?7???Python?集中營??17??1217??106??A #?8???Python?集中營??18??1218??107??A #?9???Python?集中營??19??1219??108??A #?10??Python?集中營??20??1220??109??A #?11??Python?集中營??21??1221??110??A #?12??Python?集中營??22??1222??111??A #?13??Python?集中營??23??1223??112??A #?14??Python?集中營??24??1224??113??A #?15??Python?集中營??25??1225??114??A #?16??Python?集中營??26??1226??115??A #?17??Python?集中營??27??1227??116??A
4. 數(shù)據(jù)保存
數(shù)據(jù)清洗完成之后,可以使用DataFrame對象提供的to_csv/to_excel等函數(shù)進行特定格式的數(shù)據(jù)保存。
result_.to_excel('data.xlsx')
最后,整個數(shù)據(jù)清洗的過程就完成了!
到此這篇關(guān)于三個Python常用的數(shù)據(jù)清洗處理方式總結(jié)的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)清洗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用Python進行數(shù)據(jù)清洗與存儲的基本方法
- 如何使用Python數(shù)據(jù)清洗庫
- 使用python數(shù)據(jù)清洗代碼實例
- 用Python進行數(shù)據(jù)清洗以及值處理
- Python常用的數(shù)據(jù)清洗方法詳解
- 一文帶你深入了解Python中的數(shù)據(jù)清洗
- Python數(shù)據(jù)清洗&預(yù)處理入門教程
- python?文件讀寫和數(shù)據(jù)清洗
- Python實現(xiàn)數(shù)據(jù)清洗的示例詳解
- python數(shù)據(jù)清洗中的時間格式化實現(xiàn)
- Python實現(xiàn)數(shù)據(jù)清洗的18種方法
相關(guān)文章
python 實現(xiàn)返回一個列表中出現(xiàn)次數(shù)最多的元素方法
今天小編就為大家分享一篇python 實現(xiàn)返回一個列表中出現(xiàn)次數(shù)最多的元素方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python使用pyforms實現(xiàn)輕松構(gòu)建GUI
pyforms是一個基于Python的GUI框架,它提供了一種簡單而強大的方式來構(gòu)建圖形用戶界面,本文將介紹pyforms的使用場景、優(yōu)勢以及常用的Python代碼案例,需要的小伙伴可以了解下2024-01-01
conda換源安裝torch+vscode分布式訓(xùn)練調(diào)試的實現(xiàn)
本文主要介紹了conda換源安裝torch+vscode分布式訓(xùn)練調(diào)試的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06
Python實現(xiàn)從log日志中提取ip的方法【正則提取】
這篇文章主要介紹了Python實現(xiàn)從log日志中提取ip的方法,涉及Python文件讀取、數(shù)據(jù)遍歷、正則匹配等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03

