pandas filter_数据分析之Pandas操作(2)
生活随笔
收集整理的這篇文章主要介紹了
pandas filter_数据分析之Pandas操作(2)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
接著數(shù)據(jù)分析之Pandas操作(1)的介紹,本次介紹在實際應用場景中幾個常用的函數(shù)。還是以titanic生存數(shù)據(jù)為例,本次需要導入pandas?、numpy?、scipy三個工具包。
import pandas as pdimport numpy as npfrom scipy.stats import zscoretrain_data?=?pd.read_csv("titanic/train.csv")
(1)查找及統(tǒng)計缺失值
使用函數(shù):count,功能:統(tǒng)計非空個數(shù)#統(tǒng)計非空個數(shù)train_data.count()#統(tǒng)計空值個數(shù)train_data.shape[0]-train_data.count()使用函數(shù):isnull,?功能:統(tǒng)計空值個數(shù)#計算全部數(shù)據(jù)中空值的總數(shù),與train_data.shape[0]-train_data.count() 一致np.count_nonzero(train_data.isnull())#計算某一列中空值的個數(shù)np.count_nonzero(train_data['Age'].isnull())(2)通過apply統(tǒng)計缺失值
首先自定義函數(shù),返回某個維度的空值個數(shù)#通過定義函數(shù) 統(tǒng)計缺失值def missing_counts(vector): null_vector=pd.isnull(vector) null_counts=np.sum(null_vector) return null_counts將函數(shù)作用于數(shù)據(jù)集的每一行count_missing_row=train_data.apply(missing_counts,axis=1) count_missing_row.head(10)將函數(shù)作用于每一列count_missing_col=train_data.apply(missing_counts)(3)缺失值填充使用函數(shù):fillna,功能:填充空值整個數(shù)據(jù)集填充train_data.fillna(0)具體某一列填充train_data['Age'].fillna(0)(4)缺失值刪除使用函數(shù):dropna,功能:刪除空值train_data.dropna().head(10)注:缺失值填充及缺失中默認是False,即不替換原有的數(shù)據(jù)集,如果想保留原有的數(shù)據(jù)集,可以重新一個數(shù)據(jù)集來存放處理過的數(shù)據(jù)。(5)匯總統(tǒng)計情景1:統(tǒng)計單個字段,單個數(shù)字特征#計算不同倉位的乘客平均年齡avg_age_by_pclass=train_data.groupby('Pclass').Age.mean()#單獨計算1等倉位的平均年齡avg_age_by_pclass=train_data.loc[train_data.Pclass==1]['Age'].mean()情景2:單個字段,多個數(shù)字特征,使用agg函數(shù)avg_age_by_pclass=train_data.groupby('Pclass')['Age'].agg([np.count_nonzero,np.mean,np.std])情景3:統(tǒng)計統(tǒng)計多個字段,多個數(shù)字特征avg_age_by_pclass=train_data.groupby('Pclass').agg( {'Age':'mean','Fare':'median' })情景4:重命名數(shù)字特征列,重新設(shè)置索引avg_age_by_pclass=train_data.groupby('Pclass')['Age'].agg([ np.count_nonzero, np.mean, np.std]).rename(columns={'count_nonzero':'count','mean':'avg','std':'std_dev'}).reset_index()(6)過濾,類似SQL的having#按照倉位分組,篩選倉位人數(shù)大于200的數(shù)據(jù),過濾倉位等級為2的數(shù)據(jù)train_data.groupby('Pclass').filter(lambda?x:x['Pclass'].count()>=200)['Pclass'].value_counts()?#按照倉位分組,篩選年齡均值大于29的數(shù)據(jù),過濾倉位等級為2的數(shù)據(jù)train_data.groupby('Pclass').filter(lambda?x:x['Age'].mean()>=29)['Pclass'].value_counts()(7)轉(zhuǎn)換:transform定義一個正態(tài)標準化函數(shù)#標準化函數(shù)def zscore_count(x):????return?((x-x.mean())/x.std())按照倉位分組后對年齡字段標準化#按照倉位分組后對年齡字段標準化z_transf=train_data.groupby('Pclass').Age.transform(zscore_count)z_transf.shape,train_data.shape不分組,對全量數(shù)據(jù)標準化all_z_score=zscore(train_data.Age)總結(jié):通過兩次對pandas常用操作的介紹,希望能幫助大家起到一個入門的作用,但是,pandas功能強大,還有很多細節(jié)需要在實際應用中去查閱官方文檔,不要拒絕閱讀英文官方文檔,查字典,慢慢讀。總結(jié)
以上是生活随笔為你收集整理的pandas filter_数据分析之Pandas操作(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SPI 读取不同长度 寄存器_[读书笔记
- 下一篇: wxpython制作表格界面_[Pyth