在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...