python處理資料中缺失值

2021-10-01 04:26:47 字數 2892 閱讀 8385

(1)直接刪除法(當缺失值個數只佔整體很小一部分時)

在採用刪除法處理缺失值時,需要首先檢測樣本總體中確實值得的個數。python中統計缺失值的方法為:

import numpy as np

import pandas as pd

#讀取資料,將空值形式的缺失值轉換為可識別的型別

data = pd.read_csv('data.csv',encoding='gbk')

#用nan代替空值

data = data.replace(' ',np,nan)

print(data.columns)#['id','label','a','b','c','d']

#將每列的缺失值個數統計出來

null_all = data.isnull().sum()

#isnull函式檢查資料是否有缺失返回布林值,元素為空或者nan返回ture,否則就是false

#data.isnull().any()判斷哪些列包含缺失值,該列存在缺失值則返回true,反之false

#data.isnull().sum()返回每列缺失值的數量

#檢視a列缺失值的資料

a_null = data[pd.isnull(data['a'])]

#a列缺失值佔的比重

a_ratio = len(data[pd.isnull(data['a'])])/len(data)#0.007

#缺失值所佔的比重較小,丟棄缺失值,將存在缺失值的行丟棄

new_drop = data.dropna(axis=0)#(9981,6)

print(new_drop.shape)

#dropna()預設axis=0,刪除帶有空值的行(只要有乙個就刪除整行),axis=1刪除帶有空值的列

#dropna(how='all')整行都是空值時,才會被刪除

#dropna(thresh=2),thresh設定閾值,缺失值個數大於該閾值整行(axis=0)或整列(axis=1)才會被刪除

#丟棄某幾列有缺失值的行

new_drop2 = data.dropna(axis=0,subset=['a','b'])#a和b列沒有缺失值,所以不刪除元素

print(new_drop2.shape)#(9990,6)

(2)使用乙個全域性常量填充缺失值

#用0填充缺失值

fill_data = data.fillna(0)

print(fill_data.isnull().sum())

#用乙個數字填充缺失值df.fillna(0)

#用前乙個資料代替缺失值:method='pad';

#用後乙個資料代替缺失值:method='bfill';df.finall(method='bfill')

#用乙個字串代替缺失值,df.fillna('unknow')

#使用描述性統計的值代替缺失值,例如使用平均值代替缺失值

#df.fillna(df.mean())

#finall函式也實現不同的列,用不同的值進行填充,df.finall()

#第一列用0.5填充,第三列用-1填充

#fillna預設返回新物件,可以使用inplace引數實現對現有物件直接進行修改

#new_data = df.finall(0,inplace=true)

(3)使用統計數字進行填充

#均值填充

data['a'] = data['a'].finall(data['a'].means())

#中位數填充

data['a'] = data['a'].finall(data['a'].median())

#眾數填充

data['a'] = data['a'].finall(stats.mode(data['a'])[0][0])

#用前乙個數字填充

data['a'] = data['a'].finall(method='pad')

#用後乙個數字填充

data['a'] = data['a'].finall(method='bfill')

imputer提供了缺失值處理的基本策略,比如使用缺失值所在的行或者列的均值,中位數,眾數來代替缺失值

from sklearn.preprocessing import imputer

imr = imputer(missing_values='nan',strategy='mean',axis=0)

imr = imr.fit(data.values)

imputed_data = pd.dataframe(imr.transform(data.values))

print(imputed_data[0:15])

#strategy預設平均值填充,可選'median'(中位數),'most_frequent'(眾數)

#指定軸向axis=0(預設列向);axis = 1,行向

#copy 預設true:建立資料集的副本;false:在任何地方都可以進行插值

(4)插值法,knn填充

4.1 插值法

interpolate()插值法,計算缺失值前乙個和後乙個值的平均數

data['a'] = data['a'].interpolate()
4.2 knn填充

from fancyimpute import knn

fill_knn = knn(k=3).fit_transform(data)

data = pd.dataframe(fill_knn)

print(data.head())

資料缺失值處理

步驟 1.識別缺失值 2.分析缺失的原因 3.檢視缺失值情況 4.處理缺失值 識別判斷缺失值 is.na 識別矩陣或資料框中的完整觀測 complete.cases any is.na data 檢查是否存在缺失值 head is.na data col1 5 檢視資料data中col1列前5個資料...

字段缺失 Python資料預處理 缺失值 重複值

一 缺失值處理 isnull fillna dropna 1 檢視 檢視資料集缺失,返回每列的缺失個數 df.isnull sum 檢視某字段有缺失的行 df df.a.isnull 檢視某欄位每行的缺失情況 返回t f df.score.isnull 返回0 1 df.score.isnull a...

Python 中的缺失值及其處理

缺失值處理用到的主要工具為 numpy 庫和 pandas庫中的有關函式,要匯入 numpy 和 pandas import numpy as np import pandas as pd 在 python 中,特殊的常量 none 通常被理解為缺失值的一種,我們構建了乙個包含有 none 的 nu...