不少時候在數據分析以前,咱們須要對樣本進行校驗,以肯定樣本的價值。html
先寫入數據:app
import pandas as pd import numpy as np df = pd.DataFrame({'一班':[90,80,66,75,99,55,76,78,98,None,90], '二班':[75,98,100,None,77,45,None,66,56,80,57], '三班':[45,89,77,67,65,100,None,75,64,88,99]})
# 判斷是否爲缺失值(空值) df.isnull()
# 統計出每一列的缺失值數目 df.isnull().sum()
# 每一列缺失比例 df.isnull().sum()/df.shape[0]
# 判斷非空值的數目 df.notnull().sum()
筆記:這裏也能夠用到describe方法,以下:函數
# 使用describe方法查看數據的完整性,統計出了非空值的數目 df.describe().iloc[0,:]
忘了describe方法的話,請查看《Python之Pandas知識點》post
不少樣本的時間數據並非以datatime64類型存儲的,此時咱們得先進行「數據類型修改」url
詳見:《Python之Pandas知識點》的4.3數據修改spa
以後進行最大最小相減就OK了。code
print(date.max()-date.min())
# 二班和四班是相同的 df1 = pd.DataFrame({'一班':[90,80,66,90,99,55,76,90,98,None,90], '二班':[75,98,100,75,77,45,None,75,56,80,57], '三班':[45,89,77,45,65,100,None,45,64,88,99], '四班':[75,98,100,75,77,45,None,75,56,80,57]})
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)htm
# 刪除重複樣本(行) df1.drop_duplicates()
# 計算樣本重複率 (df1.shape[0] - df1.drop_duplicates().shape[0])/df1.shape[0]
特徵重複檢驗相比樣本重複檢驗要麻煩一點,由於沒有現成的函數可調用。blog
須要用到類似度的概念,以下:get
# 使用pandas的方法:DataFrame.corr(method='pearson') asso = df1.corr()
# 輸出asso,看一下是怎樣的先 print(asso)
不難看出,這是一個對稱矩陣,因此咱們只須要判斷右上半角的數據即可。
# 輸出應刪除的columns,1.0可根據需求改動 delCol = [] for i in range(len(asso)): for j in range(i+1,len(asso)): if asso.iloc[i,j] == 1.0: delCol.append(asso.columns[j]) print(delCol)
最後,附上一段 ♦特徵重複檢驗♦ 的自定義代碼:
# 輸入DataFrame,輸出特徵重複的列名,可直接複製調用 def drop_features(data,way = 'pearson',assoRate = 1.0): ''' 此函數用於求取類似度大於assoRate的兩列中的一個,主要目的用於去除數值型特徵的重複 data:數據框,無默認 assoRate:類似度,默認爲1 ''' assoMat = data.corr(method = way) delCol = [] length = len(assoMat) for i in range(length): for j in range(i+1,length): if asso.iloc[i,j] >= assoRate: delCol.append(assoMat.columns[j]) return(delCol)
效果以下:
drop_features(df1)
是否是超好用,巨方便~~~不謝