python 採用pandas的DataFrame實現對數字型別用均值填補和分類型別用眾數填補
今天在用python對資料的數字型別用均值填補,分類型別用眾數填補,遇到幾個坑,mark一下:
1.眾數需要一列一列的填補
2.DataFrame的mode()函式會返回一個series,即多個數需要從中選擇一個進行填補,不然會一直填補不上。(我這裡是隨機選擇一個)
原始碼如下
"""
採用均值和眾數將缺失值填補
dataset是list
columns_classification是list,分類型別的位置
"""
def impute_data_by_mean_or_mode(dataset,columns_classification):
full_dataset=np.copy(dataset)
full_dataset=pd.DataFrame(full_dataset)
# print(full_dataset)
#將資料分為數字型別和分類型別
classification_data=full_dataset[columns_classification]
number_dataset=full_dataset.drop(full_dataset.columns[columns_classification], axis=1)#刪除多列的方法
#先用均值填補數字型別的欄位
number_imputed_data=number_dataset.fillna(np.mean(number_dataset))
#眾數需要一列一列填補
flag=0#標記是否第一次
classification_imputed_data=pd.DataFrame()
for index, columns in classification_data.iteritems():#按列迴圈
mode_list=columns.mode().to_list()#可能存在多個眾數,這也是總容易犯錯的地方
# print(mode_list)
#隨機選一個眾數
random_val=random.randint(0,len(mode_list)-1)
random_mode=mode_list[random_val]
#將眾數填入
columns=columns.fillna(random_mode)
columns=pd.DataFrame(columns)
# print(columns) # 輸出列名
#拼接分類型別資料
if flag==0:
classification_imputed_data=columns
else:
classification_imputed_data=classification_imputed_data.join(columns)
flag+=1
# print(classification_imputed_data)
#將填補好的資料合併
imputed_data=number_imputed_data.join(classification_imputed_data)
#根據索引將資料恢復原來的順序
imputed_data=imputed_data.sort_index(axis=1)#預設為升序
# print("--------插補結果----------")
# print(imputed_data)
return imputed_data
if __name__=='__main__':
#定義一個陣列
dataset=[[1,2.222,3,4,5],[2,None,None,None,5],[None,None,3,4,None],[1,2.5661,3,4,5.234]]
impute_data_by_mean_or_mode(dataset,[0,2,3])
執行結果如下:
相關文章
- 表單填寫數字型別驗證型別
- 2019,這些遊戲用創新填補了遊戲品類的空缺遊戲
- Python 中的鴨子型別和猴子補丁Python型別
- 整合學習(1)AdaBoost分別應用於分類和迴歸及其python實現Python
- PHP 用 Enum 限定引數型別PHP型別
- 教程 | 用Scikit-Learn實現多類別文字分類文字分類
- Lua 列印table 實現型別python的repr用於table型別Python
- Python數字型別有哪些Python型別
- 【git實際應用填坑解決】Git
- dns首選和備用填多少 首選dns伺服器怎麼填DNS伺服器
- 《面試補習》--來聊聊削峰填谷!面試
- 打破製造業數字化轉型困境:華為雲助力企業填補資料空白和簡化管理
- Python基礎(01):數字型別Python型別
- pandas.DataFrame.groupby函式應用函式
- JVM實用引數(一)JVM型別以及編譯器模式JVM型別編譯模式
- python—資料型別和變數Python資料型別變數
- 用強化學習做神經機器翻譯:中山大學&MSRA填補多項空白強化學習
- 交易型應用與消費類應用的區別 | infoworld
- 均值、中位數、眾數
- Python數值型別Python型別
- 用tensorflow2實現mnist手寫數字識別
- 用委託者模式實現的多型別Adapter模式多型型別APT
- Pandas 基礎 (8) - 用 concat 組合 dataframe
- Pixel Transformer:用畫素代替補丁可以提升影像分類精度ORM
- 小程式實現語音識別到底要填多少坑?
- 用Python實現一個SVM分類器策略Python
- python用於型別註解的庫- typingPython型別
- 用pandas實現SQL功能SQL
- BI 產品支援資料填報補錄功能嗎?
- 每刻費用型別對接金蝶雲星空的最佳實踐型別
- 藍橋python—— 方格填數【2016 第六題】Python
- CAPL指令碼中常用到的資料型別轉換——數字型別(int/double)和字串型別(char array)指令碼資料型別字串
- 型別的本質:對變數、型別、指標的理解型別變數指標
- Python 序列型別以及函式引數型別Python型別函式
- 填坑利器?Redis如何彌補傳統MySQL架構的不足RedisMySql架構
- 用遞迴求出最大公約數和最小公倍數,求補充最小公倍數的遞迴用法遞迴
- Python3.*(第五課——數值型別,萬物皆有類別)Python型別
- 用 splice函式分別實現 push、pop、shift、unshi函式