Python數(shù)據(jù)預(yù)處理時缺失值的不同處理方式總結(jié)
在使用python做數(shù)據(jù)分析的時候,經(jīng)常需要先對數(shù)據(jù)做統(tǒng)一化的處理,缺失值的處理是經(jīng)常會使用到的。
一般情況下,缺失值的處理要么是刪除缺失數(shù)據(jù)所在的行,要么就是對缺失的單元格數(shù)據(jù)進(jìn)行填充。
今天介紹的是使用差補法/均值/固定值等不同的方式完成數(shù)據(jù)填充從而保證數(shù)據(jù)的完整性!
這里采用的還是pandas模塊的DataFrame數(shù)據(jù)對象來做數(shù)據(jù)處理,因此,沒有pandas的話使用pip的方式安裝一下即可。
pip?install?pandas
下面是我們需要處理的源數(shù)據(jù),由于是本地測試數(shù)據(jù),數(shù)據(jù)量比較小。
使用pandas模塊的read_excel函數(shù)將源數(shù)據(jù)全部讀取出來返回DataFrame對象。
#?Importing?the?pandas?module?and?giving?it?the?alias?pd. import?pandas?as?pd #?Reading?the?excel?file?and?storing?it?in?a?dataframe. data_frame?=?pd.read_excel('D:/test-data-work/data.xlsx') #?Printing?the?dataframe. print(data_frame) #???????????姓名??????年齡??????班級?????成績???表現(xiàn) #?0???Python?集中營??10.0??1210.0???99.0????A #?1???Python?集中營??11.0??1211.0??100.0????A #?2???Python?集中營??12.0??1212.0??101.0????A #?3???Python?集中營??13.0??1213.0??102.0????A #?4???Python?集中營??14.0??1214.0??103.0??NaN #?5???Python?集中營??15.0??1215.0??104.0????A #?6???Python?集中營??16.0??1216.0??105.0????A #?7???Python?集中營??17.0?????NaN??106.0????A #?8???Python?集中營??18.0??1218.0????NaN????A #?9???Python?集中營??19.0??1219.0??108.0????A #?10??Python?集中營???NaN??1220.0??109.0??NaN #?11??Python?集中營???NaN?????NaN??110.0????A #?12??Python?集中營???NaN??1222.0????NaN????A #?13??Python?集中營??23.0??1223.0??112.0????A #?14??Python?集中營??24.0??1224.0??113.0????A #?15??Python?集中營??25.0?????NaN????NaN??NaN #?16??Python?集中營???NaN??1226.0??115.0????A #?17??Python?集中營??27.0??1227.0????NaN????A #?18??Python?集中營??10.0??1210.0???99.0??NaN
源數(shù)據(jù)已經(jīng)讀取完成了,接下來使用四種常見的缺失值的處理方式來進(jìn)行批量的數(shù)據(jù)填充。
1. 固定值填充
固定值填充也是一種比較簡單并且常用的填充方式,只需要給某個列填充自己想要填充的值即可。
這里我們把'表現(xiàn)'這一個列的空值全部填充成'B',fillna函數(shù)就是填充空值的意思。
#?Replacing?all?the?NaN?values?in?the?column?'表現(xiàn)'?with?the?value?'B'. data_frame['表現(xiàn)']?=?data_frame['表現(xiàn)'].fillna('B') #?Printing?the?dataframe. print(data_frame) #???????????姓名??????年齡??????班級?????成績?表現(xiàn) #?0???Python?集中營??10.0??1210.0???99.0??A #?1???Python?集中營??11.0??1211.0??100.0??A #?2???Python?集中營??12.0??1212.0??101.0??A #?3???Python?集中營??13.0??1213.0??102.0??A #?4???Python?集中營??14.0??1214.0??103.0??B #?5???Python?集中營??15.0??1215.0??104.0??A #?6???Python?集中營??16.0??1216.0??105.0??A #?7???Python?集中營??17.0?????NaN??106.0??A #?8???Python?集中營??18.0??1218.0????NaN??A #?9???Python?集中營??19.0??1219.0??108.0??A #?10??Python?集中營???NaN??1220.0??109.0??B #?11??Python?集中營???NaN?????NaN??110.0??A #?12??Python?集中營???NaN??1222.0????NaN??A #?13??Python?集中營??23.0??1223.0??112.0??A #?14??Python?集中營??24.0??1224.0??113.0??A #?15??Python?集中營??25.0?????NaN????NaN??B #?16??Python?集中營???NaN??1226.0??115.0??A #?17??Python?集中營??27.0??1227.0????NaN??A #?18??Python?集中營??10.0??1210.0???99.0??B
2. 均值填充
均值填充就是將缺失值所在列的數(shù)據(jù)進(jìn)行一次均值計算,計算出結(jié)果后再填充到缺失值所在的單元格上面。
使用均值填充的前提是這一列的數(shù)據(jù)可以進(jìn)行均值計算,比如'成績'這一列都是數(shù)字可以使用mean函數(shù)做均值計算。
#?Replacing?all?the?NaN?values?in?the?column?'成績'?with?the?mean?of?the?column?'成績'. data_frame['成績']?=?data_frame['成績'].fillna(data_frame['成績'].mean()) #?It's?printing?the?dataframe. print(data_frame) #???????????姓名??????年齡??????班級??????????成績?表現(xiàn) #?0???Python?集中營??10.0??1210.0???99.000000??A #?1???Python?集中營??11.0??1211.0??100.000000??A #?2???Python?集中營??12.0??1212.0??101.000000??A #?3???Python?集中營??13.0??1213.0??102.000000??A #?4???Python?集中營??14.0??1214.0??103.000000??B #?5???Python?集中營??15.0??1215.0??104.000000??A #?6???Python?集中營??16.0??1216.0??105.000000??A #?7???Python?集中營??17.0?????NaN??106.000000??A #?8???Python?集中營??18.0??1218.0??105.733333??A #?9???Python?集中營??19.0??1219.0??108.000000??A #?10??Python?集中營???NaN??1220.0??109.000000??B #?11??Python?集中營???NaN?????NaN??110.000000??A #?12??Python?集中營???NaN??1222.0??105.733333??A #?13??Python?集中營??23.0??1223.0??112.000000??A #?14??Python?集中營??24.0??1224.0??113.000000??A #?15??Python?集中營??25.0?????NaN??105.733333??B #?16??Python?集中營???NaN??1226.0??115.000000??A #?17??Python?集中營??27.0??1227.0??105.733333??A #?18??Python?集中營??10.0??1210.0???99.000000??B
可以發(fā)現(xiàn)計算出的均值是105.733333,已經(jīng)都填充到'成績'這一列的缺失值上面了。
3. 中位數(shù)填充
中位數(shù)填充和均值填充差不多是一樣的,不同的是使用median函數(shù)來計算缺失值所在列的中位數(shù)。
#?Replacing?all?the?NaN?values?in?the?column?'年齡'?with?the?median?of?the?column?'年齡'. data_frame['年齡']?=?data_frame['年齡'].fillna(data_frame['年齡'].median()) #?It's?printing?the?dataframe. print(data_frame) #???????????姓名??????年齡??????班級??????????成績?表現(xiàn) #?0???Python?集中營??10.0??1210.0???99.000000??A #?1???Python?集中營??11.0??1211.0??100.000000??A #?2???Python?集中營??12.0??1212.0??101.000000??A #?3???Python?集中營??13.0??1213.0??102.000000??A #?4???Python?集中營??14.0??1214.0??103.000000??B #?5???Python?集中營??15.0??1215.0??104.000000??A #?6???Python?集中營??16.0??1216.0??105.000000??A #?7???Python?集中營??17.0?????NaN??106.000000??A #?8???Python?集中營??18.0??1218.0??105.733333??A #?9???Python?集中營??19.0??1219.0??108.000000??A #?10??Python?集中營??16.0??1220.0??109.000000??B #?11??Python?集中營??16.0?????NaN??110.000000??A #?12??Python?集中營??16.0??1222.0??105.733333??A #?13??Python?集中營??23.0??1223.0??112.000000??A #?14??Python?集中營??24.0??1224.0??113.000000??A #?15??Python?集中營??25.0?????NaN??105.733333??B #?16??Python?集中營??16.0??1226.0??115.000000??A #?17??Python?集中營??27.0??1227.0??105.733333??A #?18??Python?集中營??10.0??1210.0???99.000000??B
4. 插補法填充
差補法填充可以根據(jù)該列的上一個數(shù)據(jù)和下一個數(shù)據(jù)得到該單元格需要插入的數(shù)據(jù)是多少。
比如:上一個班級是1220,下一個班級是1222,那么該單元格需要插入的數(shù)據(jù)應(yīng)該是1221。
#?Replacing?all?the?NaN?values?in?the?column?'班級'?with?the?interpolated?values?of?the?column?'班級'. data_frame['班級']?=?data_frame['班級'].interpolate() #?It's?printing?the?dataframe. print(data_frame) #???????????姓名??????年齡??????班級??????????成績?表現(xiàn) #?0???Python?集中營??10.0??1210.0???99.000000??A #?1???Python?集中營??11.0??1211.0??100.000000??A #?2???Python?集中營??12.0??1212.0??101.000000??A #?3???Python?集中營??13.0??1213.0??102.000000??A #?4???Python?集中營??14.0??1214.0??103.000000??B #?5???Python?集中營??15.0??1215.0??104.000000??A #?6???Python?集中營??16.0??1216.0??105.000000??A #?7???Python?集中營??17.0??1217.0??106.000000??A #?8???Python?集中營??18.0??1218.0??105.733333??A #?9???Python?集中營??19.0??1219.0??108.000000??A #?10??Python?集中營??16.0??1220.0??109.000000??B #?11??Python?集中營??16.0??1221.0??110.000000??A #?12??Python?集中營??16.0??1222.0??105.733333??A #?13??Python?集中營??23.0??1223.0??112.000000??A #?14??Python?集中營??24.0??1224.0??113.000000??A #?15??Python?集中營??25.0??1225.0??105.733333??B #?16??Python?集中營??16.0??1226.0??115.000000??A #?17??Python?集中營??27.0??1227.0??105.733333??A #?18??Python?集中營??10.0??1210.0???99.000000??B
到此這篇關(guān)于Python數(shù)據(jù)預(yù)處理時缺失值的不同處理方式總結(jié)的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)預(yù)處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python缺失值填充方法示例代碼
- Python?數(shù)據(jù)清洗刪除缺失值替換缺失值詳情
- python?sklearn與pandas實現(xiàn)缺失值數(shù)據(jù)預(yù)處理流程詳解
- Python處理缺失值的8種不同方法實例
- Python缺失值處理方法
- Python3?DataFrame缺失值的處理方法
- python如何去除異常值和缺失值的插值
- Python?Pandas中缺失值NaN的判斷,刪除及替換
- Python數(shù)據(jù)分析之缺失值檢測與處理詳解
- Python數(shù)據(jù)分析的八種處理缺失值方法詳解
- python缺失值的解決方法總結(jié)
- Python中查找缺失值的三種方法
相關(guān)文章
tensorflow 只恢復(fù)部分模型參數(shù)的實例
今天小編就為大家分享一篇tensorflow 只恢復(fù)部分模型參數(shù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python使用OpenCV實現(xiàn)多目標(biāo)跟蹤
這篇文章主要介紹了python使用OpenCV實現(xiàn)多目標(biāo)跟蹤,如何在OpenCV中使用MultiTracker類實現(xiàn)多目標(biāo)跟蹤API。在深入了解詳細(xì)信息之前,請查看下面列出的關(guān)于目標(biāo)跟蹤的帖子,以了解在OpenCV中實現(xiàn)的單個目標(biāo)跟蹤器的基礎(chǔ)知識,需要的朋友可以參考一下2022-04-04django自帶serializers序列化返回指定字段的方法
今天小編就為大家分享一篇django自帶serializers序列化返回指定字段的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python數(shù)據(jù)持久化shelve模塊用法分析
這篇文章主要介紹了Python數(shù)據(jù)持久化shelve模塊用法,結(jié)合實例形式較為詳細(xì)的總結(jié)分析了shelve模塊的功能、原理及簡單使用方法,需要的朋友可以參考下2018-06-06