pandas filter_数据分析之Pandas操作(2)

接着数据分析之Pandas操作(1)的介绍,本次介绍在实际应用场景中几个常用的函数。还是以titanic生存数据为例,本次需要导入pandas 、numpy 、scipy三个工具包。

import pandas as pdimport numpy as npfrom scipy.stats import zscoretrain_data = pd.read_csv("titanic/train.csv")

(1)查找及统计缺失值

使用函数:count,功能:统计非空个数
#统计非空个数train_data.count()#统计空值个数train_data.shape[0]-train_data.count()
75dd5ed8a4c1add7a96264cf3a9dc413.png 使用函数:isnull, 功能:统计空值个数
#计算全部数据中空值的总数,与train_data.shape[0]-train_data.count() 一致np.count_nonzero(train_data.isnull())
fcd402d64e7e9ee979826a87a065ea98.png
#计算某一列中空值的个数np.count_nonzero(train_data['Age'].isnull())
0a34b12774138a73676d241935d2db1a.png

(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)
5e38a0b8f0c152a43f01905147a89a2f.png 将函数作用于每一列
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()
724a655d7b20b125ce20ce98025a9050.png
#单独计算1等仓位的平均年龄avg_age_by_pclass=train_data.loc[train_data.Pclass==1]['Age'].mean()
79aaa3c06d52225acc573b1404475781.png 情景2:单个字段,多个数字特征,使用agg函数
avg_age_by_pclass=train_data.groupby('Pclass')['Age'].agg([np.count_nonzero,np.mean,np.std])
2e934f9c6737e5552df336e27cddd92b.png 情景3:统计统计多个字段,多个数字特征
avg_age_by_pclass=train_data.groupby('Pclass').agg(    {'Age':'mean','Fare':'median'    })
241b4edf9126d6d4eaedd74323cdcd84.png 情景4:重命名数字特征列,重新设置索引
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()
c9e801a6560bbb7a619fce9a80fc7fce.png (6)过滤,类似SQL的having
#按照仓位分组,筛选仓位人数大于200的数据,过滤仓位等级为2的数据train_data.groupby('Pclass').filter(lambda x:x['Pclass'].count()>=200)['Pclass'].value_counts() 
50cdee656c816cbaa06757736650ce56.png
#按照仓位分组,筛选年龄均值大于29的数据,过滤仓位等级为2的数据train_data.groupby('Pclass').filter(lambda x:x['Age'].mean()>=29)['Pclass'].value_counts()
ab15e92ef1f7f9d9bc8c8b2f8ff52c7c.png (7)转换:transform 定义一个正态标准化函数
#标准化函数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
05f88a5b25385610b46e1c6a96858c7d.png 不分组,对全量数据标准化
all_z_score=zscore(train_data.Age)
66b0f3fe30aa46309fb0004d84a75040.png总结:通过两次对pandas常用操作的介绍,希望能帮助大家起到一个入门的作用,但是,pandas功能强大,还有很多细节需要在实际应用中去查阅官方文档,不要拒绝阅读英文官方文档,查字典,慢慢读。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值