pandas缺失值處理 task01

2021-10-07 09:40:33 字數 4836 閱讀 2379

2.新特性

3.缺失值的運算特性及填充

參考pandas中缺失值有三種,np.nan,none,及針對時間的缺失值型別,nat,下面分開講解這三種型別。

首先是np.nan,由於pandas是基於numpy的,numpy的缺失值型別就是pandas最常見的缺失值類。但這個np.nan有大量問題,分下面幾點。

none比np.nan好一點,有如下幾點:

在時間型別**現缺失值時,不管是np.nan還是none,都會轉為nat,這是時間缺失值的特殊缺失值型別。

為了解決原pandas中缺失值資料型別造成的問題,pandas 1.0中新引進int64,boolean,string,三種新資料型別,這三種資料型別叫做nullable型資料,對缺失值有統一管理。

s_new = pd.series([1

,2], dtype=

"int64"

)s_new[1]

= np.nan

s_new

011

dtype: int64

在新資料型別下,出現缺失值會統一顯示為,且數值型別不會改變

s_new[1]

=none

s_new01

1dtype: int64

這三種資料型別的特點在於,有缺失值並不會改變其資料型別。

此外,對於stringl型別資料,和object型別的一點重要區別就在於,在呼叫字元方法後,string型別返回的是nullable型別,object則會根據缺失型別和資料型別而改變

convert_dtypes方法

這個函式的功能往往就是在讀取資料時,就把資料列轉為nullable型別,是1.0的新函式,使用十分方便。

pd.read_csv(

'data/table_missing.csv'

).convert_dtypes(

).dtypes

out[73]

:school string

class string

id int64

gender string

address string

height int64

weight int64

math float64

physics string

dtype:

object

在進行資料統計時,使用求和函式,缺失值會被當為0計算,乘法則會當為1計算,其他情況會跳過缺失值。

fillna方法

(a)值填充與前後向填充(分別與ffill方法和bfill方法等價)

值填充

df[

'physics'

].fillna(

'missing'

).head(

)0 a+

1 b+

2 b+

3 missing

4 a-

name: physics, dtype:

object

前後填充

#ffill 表示使用缺失值前乙個非缺失值的資料填充,bfill則表示後乙個值

df['physics'

].fillna(method=

'ffill'

).head(

)

(b)填充中的對齊特性

這裡的對齊特性,指的是只填充返回結果中的列。

2.dropna方法

dropna方法有三個引數,軸的方向axis,刪除方法how,和判斷區域subset

(a)axis=0,1表示的按行看還是按列看

df_d = pd.dataframe(

)df_d.dropna(axis=0)

a b c

0 nan nan 3

1 nan 3.0

22 nan 2.0

1a b c

返回結果為空,因為每一行都有缺失值

(b) how引數(可以選all或者any,表示全為缺失去除和存在缺失去除)

in [89]

:df_d.dropna(axis=

1,how=

'all'

)out[89]

: b c

0 nan 3

13.022

2.01

(c)subset引數(即在某一組列範圍中搜尋缺失值)

in [90]

:df_d.dropna(axis=

0,subset=

['b'

,'c'])

out[90]

: a b c

1 nan 3.0

22 nan 2.0

1

(a)索引無關的線性插值

預設狀態下,interpolate會對缺失的值進行線性插值

in [91]

:s = pd.series([1

,10,15

,-5,

-2,np.nan,np.nan,28]

)sout[91]

:01.01

10.0

215.03-

5.04

-2.0

5 nan

6 nan

728.0

dtype: float64

這種插值方法與索引無關,會造成並不是線性的結果

s.interpolate(

)out[92]

:01.01

10.0

215.03-

5.04

-2.0

58.0

618.0

728.0

dtype: float64

加入時間索引或者索引,會取得真的線性插值結果

s.interpolate(method=

'index'

).plot(

)

索引為時間時

s_t = pd.series([0

,np.nan,10]

,index=

[pd.timestamp(

'2012-05-01'

),pd.timestamp(

'2012-05-07'

),pd.timestamp(

'2012-06-03')]

)s_t.interpolate(method=

'time'

)

ser = pd.series(np.arange(1,

10.1

,.25)**

2+ np.random.randn(37)

)missing = np.array([4

,13,14

,15,16

,17,18

,20,29

])ser[missing]

= np.nan

methods =

['linear'

,'quadratic'

,'cubic'

]df = pd.dataframe(

)df.plot(

)

插值的一些引數設定

(a)limit表示最多插入多少個

s = pd.series([1

,np.nan,np.nan,np.nan,5]

)s.interpolate(limit=2)

01.0

12.0

23.0

3 nan

45.0

dtype: float64

(b)limit_direction表示插值方向,可選forward,backward,both,預設前向

s = pd.series(

[np.nan,np.nan,

1,np.nan,np.nan,np.nan,

5,np.nan,np.nan,])

s.interpolate(limit_direction=

'backward')0

1.01

1.02

1.03

2.04

3.05

4.06

5.07 nan

8 nan

dtype: float64

(c)插值區域引數設定

s = pd.series(

[np.nan,np.nan,

1,np.nan,np.nan,np.nan,

5,np.nan,np.nan,])

s.interpolate(limit_area=

'inside'

)0 nan

1 nan

21.0

32.0

43.0

54.0

65.0

7 nan

8 nan

dtype: float64

``none』』:沒有填充限制。『inside』:僅填充有效值包圍的nan(插)。『外部』:僅在有效值之外填充nan(外推)。

[1] datawhalechina/joyful-pandas

Pandas 缺失值處理

二 處理缺失值 首先拿到乙份資料,以dataframe提取後,要檢視缺失值的情況 import pandas as pd df pd.read csv df.isnull 獲得true,false的返回值 df.isnull sum 判斷缺失的數量常用此介面來快速判斷各特徵的缺失值情況!df.dro...

Pandas缺失值處理

判斷資料是否為nan pd.isnull df pd.notnull df 判斷缺失值是否存在 np.all pd.notnull data 返回false代表有空值 np.any pd.isnull data 返回true代表有空值處理方式 2 替換缺失值 fillna value,inplace...

Pandas的缺失值處理

處理方式 不是缺失值nan,有預設標記的 判斷資料是否為nan pd.isnull df pd.notnull df pd.isna df 讀取資料 movie pd.read csv date imdb movie data.csv 第一種 刪除 pandas刪除缺失值,使用dropna的前提是,...