在資料建模前,需要檢視每一列資料的缺失情況,當缺失值的佔比超過一定閾值,就需要考慮,這一列資料(或者這乙個變數)是否需要參與建模。一般選用的閾值在0.9,即:當某乙個變數的缺失值佔比達到90%以上,就需要刪除。
這裡選用pandas作為主要的資料分析工具,感興趣的讀者可以去pandas官網逛逛,下面開始介紹,如何用pandas檢視每乙個變數的缺失佔比情況,以及繪製出變數缺失分布的柱狀圖。
import pandas as pd
import numpy as np
df = pd.dataframe(data=)
a b c d
0 nan nan nan 12
1 nan nan 12.0 13
2 nan 12.0 13.0 14
3 12.0 13.0 14.0 15
4 13.0 14.0 15.0 16
5 14.0 15.0 16.0 17
可以看到,a變數的缺失值佔比為50%,b變數的缺失值佔比為33.33%,c變數的缺失值佔比為16.67%,d變數缺失值佔比為0%。((df.isnull().sum())/df.shape[0]).sort_values(ascending=false).map(lambda x:"".format(x))
a 50.00%
b 33.33%
c 16.67%
d 0.00%
dtype: object
如果考慮到閾值為0.5,那麼a變數就需要刪除。關於這段**的詳細步驟,在下面會有解釋說明。
通過第四步的操作,可以看出資料的缺失佔比情況;
這裡需要畫出資料每乙個變數的缺失柱狀圖,考慮到有些變數沒有缺失值,所以這裡選用非缺失資料的佔比情況,如下:
pyecharts是我在工作中主要使用的視覺化工具,所以這裡選用pyecharts來繪製分布柱狀圖。感興趣的讀者可以去pyecharts官網逛逛。bar_dict = ((df.notnull().sum())/df.shape[0]).sort_values(ascending=false).to_dict()
#
這裡,為了柱狀圖的美觀,需要對數字的顯示格式設定一下,將資料從小數轉為百分比資料,設定如下:
label_opts=opts.labelopts(is_show=true,formatter='%')
詳細繪圖**如下:
from pyecharts.charts import bar
from pyecharts import options as opts
from pyecharts.globals import _warningcontrol
_warningcontrol.showwarning = false
c = (
bar()
.add_xaxis(list(bar_dict))
.add_yaxis(
"非缺失資料佔比",
[round(i*100,2) for i in list(bar_dict.values())],
label_opts=opts.labelopts(is_show=true,formatter='%'),
)
.set_global_opts(title_opts=opts.titleopts(title="缺失資料分析"))
)
c.render_notebook()
((df.isnull().sum())/df.shape[0]).sort_values(ascending=false).map(lambda x:"".format(x))
iisnull()方法作用於df中的每乙個值,如果這個值為nan,則為true,否則為false,最終返回乙個與df有著相同行/列的dataframe物件。
notnull()方法作用於df中的每乙個值,如果這個值為nan,則為false,否則為true,最終返回乙個與df有著相同行/列的dataframe物件。
求和計算,常用的引數# df.isnull()
a b c d
0 true true true false
1 true true false false
2 true false false false
3 false false false false
4 false false false false
5 false false false false
# df.notnull()
a b c d
0 false false false true
1 false false true true
2 false true true true
3 true true true true
4 true true true true
5 true true true true
axis:求和方向,1表示求每一行的和,0表示求每一列的和。(預設為0)
獲取行和列,返回元組(行,列)# df.sum()
a 39.0
b 54.0
c 70.0
d 87.0
dtype: float64
# df.sum(axis=1)
0 12.0
1 25.0
2 39.0
3 54.0
4 58.0
按照某一字段排序# df.shape
(6, 4)
by:按照某一列的資料排序,
ascending:false為降序,true為公升序,(預設為true)
pandas.series.map()
# 將每乙個小數值變為百分比
pandas.series.map(lambda x:"".format(x))
Pandas 缺失資料
一.處理缺失資料 二.濾除缺失資料 三.填充缺失資料 方法說明 dropna根據各標籤的值中是否存在缺失資料對軸標籤進行過濾,可通過閾值調節對缺失值的容忍度 fillna用指定值或插值方法 如 ffill 或 bfill 填充缺失資料 isnull返回乙個含有布林值的物件,這些布林值表示哪些值時預設...
Pandas缺失資料
一 缺失值的統計和刪除 缺失資訊的統計 資料處理中經常需要根據缺失值的大小 比例或其他特徵來進行行樣本或列特徵的刪除,pandas中提供了dropna函式來進行操作。dropna的主要引數為軸方向axis 預設為0,即刪除行 刪除方式how 刪除的非缺失值個數閾值thresh 非 缺 失 值 col...
pandas 缺失資料
檢視缺失的比例 全部缺失 df sub set.isna any 1 head 至少有乙個缺失 沒有缺失 資料處理中經常需要根據缺失值的大小 比例或其他特徵來進行行樣本或列特徵的刪除,pandas中提供了dropna函式來進行操作。dropna的主要引數為軸方向axis 預設為0,即刪除行 刪除方式...