網(wǎng)站首頁 編程語言 正文
注:代碼用 jupyter notebook跑的,分割線線上為代碼,分割線下為運行結(jié)果
1.導(dǎo)入庫生成缺失值
通過pandas生成一個6行4列的矩陣,列名分別為'col1','col2','col3','col4',同時增加兩個缺失值數(shù)據(jù)。
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
#生成缺失數(shù)據(jù)
df=pd.DataFrame(np.random.randn(6,4),columns=['col1','col2','col3','col4']) #生成一份數(shù)據(jù)
#增加缺失值
df.iloc[1:2,1]=np.nan
df.iloc[4,3]=np.nan
df
? ? ? ? col1?? ? ? ?col2?? ? ? ?col3?? ? ? ?col4
0?? ?-0.480144?? ?1.463995?? ?0.454819?? ?-1.531419
1?? ?-0.418552?? ? ? NaN?? ? ? ?-0.931259?? ?-0.534846
2?? ?-0.028083?? ?-0.420394?? ?0.925346?? ?0.975792
3?? ?-0.144064?? ?-0.811569?? ?-0.013452?? ?0.110480
4?? ?-0.966490?? ?-0.822555?? ?0.228038?? ?NaN
5?? ?-0.017370?? ?-0.538245?? ?-2.083904?? ?0.230733
2.查看哪些值缺失(第2行第2列,第5行第4列)
nan_all=df.isnull() #獲得所有數(shù)據(jù)中的nan
nan_all
?? ?col1?? ?col2?? ?col3?? ?col4
0?? ?False?? ?False?? ?False?? ?False
1?? ?False?? ?True?? ?False?? ?False
2?? ?False?? ?False?? ?False?? ?False
3?? ?False?? ?False?? ?False?? ?False
4?? ?False?? ?False?? ?False?? ?True
5?? ?False?? ?False?? ?False?? ?False
3 any()方法來查找含有至少1個缺失值的列,all()方法來查找全部缺失值的列
#使用any方法
nan_col1=df.isnull().any() #獲得含有nan的列
print(nan_col1)
col1 ? ?False
col2 ? ? True
col3 ? ?False
col4 ? ? True
dtype: bool
#使用all方法
nan_col2=df.isnull().all() #獲得全部為nan的列
print(nan_col2)
col1 ???False
col2 ???False
col3 ???False
col4 ???False
dtype: bool
4.法一:直接丟棄缺失值
df1=df.dropna()#直接丟棄含有nan的行記錄
df1
col1?? ?col2?? ?col3?? ?col4
0?? ?-0.480144?? ?1.463995?? ?0.454819?? ?-1.531419
2?? ?-0.028083?? ?-0.420394?? ?0.925346?? ?0.975792
3?? ?-0.144064?? ?-0.811569?? ?-0.013452?? ?0.110480
5?? ?-0.017370?? ?-0.538245?? ?-2.083904?? ?0.230733
5.法二:使用sklearn將缺失值替換為特定值
首先通過SimpleImputer創(chuàng)建一個預(yù)處理對象,缺失值替換方法默認(rèn)用均值替換,及strategy=mean,還可以使用中位數(shù)median,眾數(shù)most_frequent進行替換,接著使用預(yù)處理對象的fit_transform對df進行處理,代碼如下:
#使用sklearn將缺失值替換為特定值
nan_mean=SimpleImputer(strategy='mean') #用均值填補
nan_median=SimpleImputer(strategy='median') #用中位數(shù)填補
nan_0=SimpleImputer(strategy='constant',fill_value=0) #用0填補
#應(yīng)用模型
nan_mean_result=nan_mean.fit_transform(df)
nan_median_result=nan_median.fit_transform(df)
nan_0_result=nan_0.fit_transform(df)
print(nan_mean_result)
print(nan_median_result)
print(nan_0_result)
?[-0.48014389 ?1.46399462 ?0.45481856 -1.53141863]
?[-0.4185523 ?-0.22575384 -0.93125874 -0.53484561]
?[-0.02808329 -0.42039426 ?0.925346 ? ?0.97579191]
?[-0.14406438 -0.81156913 -0.0134516 ? 0.11048025]
?[-0.96649028 -0.82255505 ?0.22803842 -0.14985173]
?[-0.01737047 -0.53824538 -2.0839036 ? 0.23073341]
?
?[-0.48014389 ?1.46399462 ?0.45481856 -1.53141863]
?[-0.4185523 ?-0.53824538 -0.93125874 -0.53484561]
?[-0.02808329 -0.42039426 ?0.925346 ? ?0.97579191]
?[-0.14406438 -0.81156913 -0.0134516 ? 0.11048025]
?[-0.96649028 -0.82255505 ?0.22803842 ?0.11048025]
?[-0.01737047 -0.53824538 -2.0839036 ? 0.23073341]
?
?[-0.48014389 ?1.46399462 ?0.45481856 -1.53141863]
?[-0.4185523 ? 0. ? ? ? ? -0.93125874 -0.53484561]
?[-0.02808329 -0.42039426 ?0.925346 ? ?0.97579191]
?[-0.14406438 -0.81156913 -0.0134516 ? 0.11048025]
?[-0.96649028 -0.82255505 ?0.22803842 ?0. ? ? ? ?]
?[-0.01737047 -0.53824538 -2.0839036 ? 0.23073341]
6.法三:使用pandas將缺失值替換為特定值
pandas對缺失值處理方法是df.fillna(),該方法的兩個主要參數(shù)是value和method。前者通過固定或手動指定的值替換缺失值,后者使用pandas提供的方法替換缺失值。以下是method支持的方法:
(1)pad和ffill:使用前面的值替換缺失值
(2)backfill和bfill:使用后面的值替換缺失值
(3)大多數(shù)情況下用均值、眾數(shù)、中位數(shù)的方法較為常用
#使用pandas將缺失值替換為特定值
nan_result_pd1=df.fillna(method='backfill')
nan_result_pd2=df.fillna(method='bfill',limit=1)#用后面的值替換缺失值,限制每列只能替換一個缺失值
nan_result_pd3=df.fillna(method='pad')
nan_result_pd4=df.fillna(0)
nan_result_pd5=df.fillna({'col2':1.1,'col4':1.2}) #手動指定兩個缺失值分別為1.1,1.2
nan_result_pd6=df.fillna(df.mean()['col2':'col4'])
nan_result_pd7=df.fillna(df.median()['col2':'col4'])
print(nan_result_pd1)
print(nan_result_pd2)
print(nan_result_pd3)
print(nan_result_pd4)
print(nan_result_pd5)
print(nan_result_pd6)
print(nan_result_pd7)
? col1 ? ? ?col2 ? ? ?col3 ? ? ?col4
0 -0.480144 ?1.463995 ?0.454819 -1.531419
1 -0.418552 -0.420394 -0.931259 -0.534846
2 -0.028083 -0.420394 ?0.925346 ?0.975792
3 -0.144064 -0.811569 -0.013452 ?0.110480
4 -0.966490 -0.822555 ?0.228038 ?0.230733
5 -0.017370 -0.538245 -2.083904 ?0.230733
? ? ? ?col1 ? ? ?col2 ? ? ?col3 ? ? ?col4
0 -0.480144 ?1.463995 ?0.454819 -1.531419
1 -0.418552 -0.420394 -0.931259 -0.534846
2 -0.028083 -0.420394 ?0.925346 ?0.975792
3 -0.144064 -0.811569 -0.013452 ?0.110480
4 -0.966490 -0.822555 ?0.228038 ?0.230733
5 -0.017370 -0.538245 -2.083904 ?0.230733
? ? ? ?col1 ? ? ?col2 ? ? ?col3 ? ? ?col4
0 -0.480144 ?1.463995 ?0.454819 -1.531419
1 -0.418552 ?1.463995 -0.931259 -0.534846
2 -0.028083 -0.420394 ?0.925346 ?0.975792
3 -0.144064 -0.811569 -0.013452 ?0.110480
4 -0.966490 -0.822555 ?0.228038 ?0.110480
5 -0.017370 -0.538245 -2.083904 ?0.230733
? ? ? ?col1 ? ? ?col2 ? ? ?col3 ? ? ?col4
0 -0.480144 ?1.463995 ?0.454819 -1.531419
1 -0.418552 ?0.000000 -0.931259 -0.534846
2 -0.028083 -0.420394 ?0.925346 ?0.975792
3 -0.144064 -0.811569 -0.013452 ?0.110480
4 -0.966490 -0.822555 ?0.228038 ?0.000000
5 -0.017370 -0.538245 -2.083904 ?0.230733
? ? ? ?col1 ? ? ?col2 ? ? ?col3 ? ? ?col4
0 -0.480144 ?1.463995 ?0.454819 -1.531419
1 -0.418552 ?1.100000 -0.931259 -0.534846
2 -0.028083 -0.420394 ?0.925346 ?0.975792
3 -0.144064 -0.811569 -0.013452 ?0.110480
4 -0.966490 -0.822555 ?0.228038 ?1.200000
5 -0.017370 -0.538245 -2.083904 ?0.230733
? ? ? ?col1 ? ? ?col2 ? ? ?col3 ? ? ?col4
0 -0.480144 ?1.463995 ?0.454819 -1.531419
1 -0.418552 -0.225754 -0.931259 -0.534846
2 -0.028083 -0.420394 ?0.925346 ?0.975792
3 -0.144064 -0.811569 -0.013452 ?0.110480
4 -0.966490 -0.822555 ?0.228038 -0.149852
5 -0.017370 -0.538245 -2.083904 ?0.230733
? ? ? ?col1 ? ? ?col2 ? ? ?col3 ? ? ?col4
0 -0.480144 ?1.463995 ?0.454819 -1.531419
1 -0.418552 -0.538245 -0.931259 -0.534846
2 -0.028083 -0.420394 ?0.925346 ?0.975792
3 -0.144064 -0.811569 -0.013452 ?0.110480
4 -0.966490 -0.822555 ?0.228038 ?0.110480
5 -0.017370 -0.538245 -2.083904 ?0.230733
另外,如果是直接替換為特定值,也可以考慮用pandas的replace功能,例如本示例可直接使用df.replace(np.nan,0),這種方法簡單粗暴,但也能達(dá)到效果。當(dāng)然replace的出現(xiàn)是為了解決各種替換用的,缺失值只是其中一種應(yīng)用而已。
原文鏈接:https://blog.csdn.net/weixin_60200880/article/details/126988094
相關(guān)推薦
- 2023-03-30 C語言楊氏矩陣簡單實現(xiàn)方法_C 語言
- 2022-11-18 redis批量操作pipeline管道操作方法_Redis
- 2022-10-01 React?hooks?useState異步問題及解決_React
- 2022-04-04 git: master (pre-receive hook declined)
- 2023-03-26 Kotlin?server多線程編程詳細(xì)講解_Android
- 2023-01-18 解讀Scrapy回調(diào)函數(shù)callback傳遞參數(shù)的方式_python
- 2022-07-17 絕對、相對導(dǎo)入以及包和常見內(nèi)置模塊
- 2023-01-18 高斯衰減python實現(xiàn)方式_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支