Pandas中資料的缺失處理

2021-10-07 11:16:36 字數 1600 閱讀 5321

在pandas資料處理中,資料值缺失是經常面臨的問題。如何查詢、處理缺失值就成了資料處理的必備方法。

一、缺失值型別

pandas中缺失值主要有三種符號:np.nan、none和nat。

np.nan是缺失值的一種符號,nan意為not a number。它不等於任何東西,包括它本身。其次,在使用equals函式進行比較時,會自動略過兩側全是np.nan的單元格。再次,它在numpy中的型別為浮點,由此導致資料集讀入時,即使原來是整數的列,只要有缺失值就會變為浮點型。此外,對於布林型別的列表,如果是np.nan填充,那麼它的值會自動變為true而不是false。但當修改乙個布林列表時,會改變列表型別,而不是賦值為true。在所有的**讀取後,無論列是存放什麼型別的資料,預設的缺失值全為np.nan型別。因此整型列轉為浮點;而字元由於無法轉化為浮點,因此只能歸併為object型別('o'),原來是浮點型的則型別不變。

none:和np.nan相比,none不會等於它自身。由於它本身的布林值為false,所以修改布林列表不會改變資料型別。但是在傳入數值型別後,會自動變為np.nan。只要當傳入object型別保持不動。因此,幾乎可以認為,除非人工命名none,它基本不會自動出現在pandas中。

nat:可以看做是時間序列的nan,因此,它的很多性質都與np.nan接近。

但是,pandas1.0引入了乙個重大改變,引入了新的缺失值型別na,統一了確實值處理方法。它的好處就在於前面提到的三種缺失值都會被替換為統一的na符號,且不改變資料型別。

二、蒐集缺失值資訊

在對缺失值就行處理之前,首先要了解缺失值的資訊。比如,每列資料標籤有多少個缺失值,每行的缺失值情況。了解缺失值資訊,主要有以下幾種方法。

(1)isna和notna方法

可用該方法返回布林值:

df[***].isna().head()

df[***].notna().head()

對於dataframe或者大量資料,可以直接求出缺失值的數量:

df.isna().sum()

此外,還可以使用info函式檢視缺失值的資訊。

(2)檢視缺失值所在的行

df[df[***].isna()]

(3)挑出所有非缺失值列

df[df.notna().all(1)]

#如果將all換成any,表示至少有乙個不是缺失值。

三、缺失值的處理

對於缺失值的處理,一般有兩種方式:填充和剔除。

(一)填充

(1)fillna方法:method=『ffill』表示向前填充,method=『backfill』表示向後填充。語句為df[***].fillna(method=***)

(2)interpolate插值:可分為與索引有關的線性插值和與索引無關的線性插值,由method引數控制。另外,還可以通過limit引數控制插入數量,limit_direction引數控制插值方向,limit_area控制插值區域。

(3)高階插值:樣條插值、多項式插值、阿基瑪插值等。

(二)剔除

dropna方法:沿著axis去除缺失值,語句為df.dropna(axis=0/1,how=**),其中how可以等於all或者any,分別表示全為缺失值去除和存在缺失值去除。另外,還可以新增subset引數,控制在某一組範圍中搜尋缺失值。

Pandas 處理缺失資料

import numpy as np import pandas as pd from pandas import series,dataframes series a b np.nan,c d pd.isnull s 0 false 1 false 2 true 3 false 4 false d...

pandas處理缺失資料

na處理方法 方法 說明 dropna 根據各標籤的值中是否存在缺失資料對軸標籤進行過濾,可通過閾值調節對缺失值得容忍度 fillna 用指定值或插值方法 如ffill和bfill 填充缺失資料 isnull 返回乙個含有布林值的物件,這些布林值表示哪些值是缺失值na,該物件的型別與源型別一樣 no...

pandas處理,填充缺失資料

1 pandas使用浮點值nan表示浮點和非浮點陣列的缺失資料 對於乙個series可以用dropna方法或者通過布林型索引達到目的 2 對於dataframe丟棄全na 丟棄全為na的那些行 丟棄全為na的那些列 利用thresh,留下一部分觀測資料 thresh 3,表示在行方向上至少有3個非n...