App下載

Python----pandas:缺失值處理

猿友 2020-12-31 10:21:15 瀏覽數(shù) (3577)
反饋

前言

Hello,屏幕前的小伙伴們大家好呀,一年又一年,一天又一天,轉(zhuǎn)瞬之間夢幻般的 2020 年,也即將要過去了,小編先在這提前祝大家:元旦快楽。今天呢給大家分享在用 pandas 做數(shù)據(jù)分析時(shí),遇到缺失值的幾種處理方法。推薦好課:Python 自動(dòng)化辦公Python3進(jìn)階:數(shù)據(jù)分析及可視。

當(dāng)我們?cè)谔幚頂?shù)據(jù)時(shí),遇到數(shù)值缺失的問題時(shí),pandas 在這方面提供了很全面的方法,主要包括:

  • isnull()——找出缺失值;
  • notnull()——找出非缺失值;
  • dropna()——剔除缺失值;
  • fillna()——填充缺失值。具體使用方法請(qǐng)往下看。

一、isnull()

isnull() 用來找出缺失值的位置,返回一個(gè)布爾類型的掩碼標(biāo)記缺失值,下面是案例:

import pandas as pd

import numpy as np

data = pd.DataFrame({'name':['W3CSCHOOL',np.nan,'JAVA','PYTHON'],'age':[18,np.nan,99,None]})

data

執(zhí)行以上代碼得到數(shù)據(jù)如下:

        name   age

0  W3CSCHOOL   18.0

1    NaN NaN

2       JAVA   99.0

3     PYTHON   NaN

這里我們可以看到不管我們創(chuàng)建DataFrame時(shí)控制用的是np.nan還是None,創(chuàng)建后都會(huì)變成NaN。

data.isnull()

    name    age

0  False  False

1   True   True

2  False  False

3  False   True

二、notnull()

notnull()與isnull()正好相反,是找出非空值并用布爾值進(jìn)行標(biāo)記,下面是例子:

data.notnull()

    name    age

0   True   True

1  False  False

2   True   True

3   True  False

三、dropna()

dropna()就是字面意思,丟掉缺失值。

DataFrame.dropna(axis=0, how=‘a(chǎn)ny’, thresh=None, subset=None, inplace=False)

參數(shù):

  • axis:默認(rèn)為 0,表示刪除行還是列,也可以用“index”和“columns”表示;
  • how:{‘a(chǎn)ny’, ‘a(chǎn)ll’}, 默認(rèn)為 ‘a(chǎn)ny’;any 表示只要該行(列)出現(xiàn)空值就刪除整行(列),all 表示整行(列)都出現(xiàn)空值才會(huì)刪除整行(列);
  • thresh:表示刪除非空值小于 thresh 個(gè)數(shù)時(shí)刪除;
  • subset:列表類型,表示哪些列里有空值才刪除行或列;
  • inplace:與其他函數(shù)的 inplace 一樣,表示是否覆蓋原 DataFrame。

下面是例子:

data.dropna(axis=1,thresh=3)

              name

0        W3CSCHOOL

1              NaN

2             JAVA

3           PYTHON

data.dropna(axis=0,how='all')

              name   age

0        W3CSCHOOL  18.0

2             JAVA  21.0

3           PYTHON   NaN

data.dropna(subset = ['name'])

              name   age

0        W3CSCHOOL  18.0

2             JAVA  21.0

3           PYTHON   NaN

四、fillna()

fillna()的作用是填充缺失值

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

參數(shù):

  • value:設(shè)置用于填充 DataFrame 的值
  • method:默認(rèn)為 None;設(shè)置填充 DataFrame 的方法有:‘backfill’, ‘bfill’, - ‘pad’, ‘ffill’四種,其中‘backfill’和 ‘bfill’是用前面的值填充空缺值,‘pad’和 ‘ffill’是用后面的值填充空缺值
  • axis:填充缺失值所沿的軸,與上文的 axis 設(shè)置方法一樣
  • inplace:是否替換原 DataFrame,與上文的設(shè)置方法一樣
  • limit:設(shè)置被替換值的數(shù)量限制
  • downcast:表示向下兼容轉(zhuǎn)換類型,不常用

下面是例子:

data.fillna(0)

              name   age

0        W3CSCHOOL  18.0

1                0   0.0

2             JAVA  21.0

3           PYTHON   0.0

data.fillna(method='ffill')

              name   age

0        W3CSCHOOL  18.0

1        W3CSCHOOL  18.0

2             JAVA  21.0

3           PYTHON  21.0


0 人點(diǎn)贊