接著數據分析之Pandas操作(1)的介紹,本次介紹在實際應用場景中幾個常用的函數。還是以titanic生存數據為例,本次需要導入pandas?、numpy?、scipy三個工具包。
import pandas as pd
import numpy as np
from scipy.stats import zscore
train_data?=?pd.read_csv("titanic/train.csv")
(1)查找及統計缺失值
使用函數:count,功能:統計非空個數#統計非空個數train_data.count()#統計空值個數train_data.shape[0]-train_data.count()

#計算全部數據中空值的總數,與train_data.shape[0]-train_data.count() 一致
np.count_nonzero(train_data.isnull())

#計算某一列中空值的個數
np.count_nonzero(train_data['Age'].isnull())

(2)通過apply統計缺失值
首先自定義函數,返回某個維度的空值個數#通過定義函數 統計缺失值def missing_counts(vector): null_vector=pd.isnull(vector) null_counts=np.sum(null_vector) return null_counts
將函數作用于數據集的每一行count_missing_row=train_data.apply(missing_counts,axis=1)
count_missing_row.head(10)

count_missing_col=train_data.apply(missing_counts)
(3)缺失值填充使用函數:fillna,功能:填充空值整個數據集填充train_data.fillna(0)
具體某一列填充train_data['Age'].fillna(0)
(4)缺失值刪除使用函數:dropna,功能:刪除空值train_data.dropna().head(10)
注:缺失值填充及缺失中默認是False,即不替換原有的數據集,如果想保留原有的數據集,可以重新一個數據集來存放處理過的數據。(5)匯總統計情景1:統計單個字段,單個數字特征#計算不同倉位的乘客平均年齡
avg_age_by_pclass=train_data.groupby('Pclass').Age.mean()

#單獨計算1等倉位的平均年齡
avg_age_by_pclass=train_data.loc[train_data.Pclass==1]['Age'].mean()

avg_age_by_pclass=train_data.groupby('Pclass')['Age'].agg([np.count_nonzero,np.mean,np.std])

avg_age_by_pclass=train_data.groupby('Pclass').agg( {'Age':'mean','Fare':'median' })

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()

#按照倉位分組,篩選倉位人數大于200的數據,過濾倉位等級為2的數據
train_data.groupby('Pclass').filter(lambda?x:x['Pclass'].count()>=200)['Pclass'].value_counts()?

#按照倉位分組,篩選年齡均值大于29的數據,過濾倉位等級為2的數據
train_data.groupby('Pclass').filter(lambda?x:x['Age'].mean()>=29)['Pclass'].value_counts()

#標準化函數
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

all_z_score=zscore(train_data.Age)
