pandas pivot 计算占比_数据分析Pandas 基础(二)
推荐阅读:数据分析--Pandas 基础(一)
上一节课介绍了 Pandas 的基本用法,这一章节我们通过对 “泰坦尼克号” 幸存者进行数据分析,来进一步的学习 pandas。
titanic_train.csv
网盘链接:链接:https://pan.baidu.com/s/1hGc19QAGV6H-hDtOdz-GpQ 提取码:sgu8
数据简介:
- PassengerId:乘客ID
- Survived:是否获救,用1和Rescued表示获救,用0或者not saved表示没有获救
- Pclass:乘客等级,“1”表示Upper,“2”表示Middle,“3”表示Lower
- Name:乘客姓名
- Sex:性别
- Age:年龄
- SibSp:乘客在船上的配偶数量或兄弟姐妹数量)
- Parch:乘客在船上的父母或子女数量
- Ticket:船票信息
- Fare:票价
- Cabin:是否住在独立的房间,“1”表示是,“0”为否
- embarked:表示乘客上船的码头距离泰坦尼克出发码头的距离,数值越大表示距离越远
首先读入 数据
import pandas as pdimport numpy as nptitanic_survival = pd.read_csv("titanic_train.csv")titanic_survival.head() #查看前几行数据
在 pandas 中,使用 NaN 表示数据为空,表示数据缺失
使用 .isnull()
函数判断一列数据是否为空
age = titanic_survival["Age"]age_is_null = pd.isnull(age)print(age_is_null)
查看空数据情况
age_null_true = age[age_is_null]print (age_null_true)
上图显示出,Age 这一列 ,长度 177, 数据类型 float64
也可以直接使用len()
来判断长度
age_null_count = len(age_null_true)print(age_null_count)
>>> 177
在我们处理数据过程中,如果数据中包含 nan 会导致计算出错,下面来演示计算泰坦尼克号幸存者的平均年龄
mean_age = sum(titanic_survival["Age"]) / len(titanic_survival["Age"])print (mean_age)
>>>nan
如上所示,在计算之前我们需要过滤掉空数据
good_ages = titanic_survival["Age"][age_is_null == False]print (good_ages)
我们知道第 888 号数据为空,下图第888号数据被过滤
过滤掉空数据,再计算均值:
correct_mean_age = sum(good_ages) / len(good_ages)print (correct_mean_age)
>>> 29.69911764705882
我们也可以使用.mean()
来计算均值,可以过滤空数据
correct_mean_age = titanic_survival["Age"].mean()print (correct_mean_age)
>>>29.69911764705882 #结果和上式相同
一共有3个种类的舱位,下面计算每种舱位的平均价格
passenger_classes = [1, 2, 3]fares_by_class = {}for this_class in passenger_classes: pclass_rows = titanic_survival[titanic_survival["Pclass"] == this_class] pclass_fares = pclass_rows["Fare"] fare_for_class = pclass_fares.mean() fares_by_class[this_class] = fare_for_classprint (fares_by_class)
>>> {1: 84.1546875, 2: 20.662183152173913, 3: 13.675550101832993}
计算 3 个舱位的生还概率,可以使用 .pivot_table(index, values, aggfunc)
方法
index:索引列
values:目标列(待计算)
aggfunc:使用的方法
我们先看一下原表,0 代表死亡,1 代表生还,Pclass 舱位等级,分 1 ,2, 3 三个等级的舱位,以 Pclass 为索引,以 Survived 为值,计算生还概率
passenger_survival = titanic_survival.pivot_table(index="Pclass", values='Survived', aggfunc=np.mean)print(passenger_survival)
舱位选择的平均年龄
passenger_age = titanic_survival.pivot_table(index="Pclass", values="Age")print(passenger_age)
以 上船距离为索引,费用和生还人数为值
port_stats = titanic_survival.pivot_table(index="Embarked", values=["Fare","Survived"], aggfunc=np.sum)print(port_stats)
令 axis=1
或者 axis=‘columns’
,可以删除 含有 null 的列
drop_na_columns = titanic_survival.dropna(axis=1)new_titanic_survival = titanic_survival.dropna(axis=0,subset=["Age", "Sex"])print (new_titanic_survival)
如下图,通过对比可以发现,“Age”列的第 888 行为空,被去除
生还者按照年龄降序排列
new_titanic_survival = titanic_survival.sort_values("Age",ascending=False)print (new_titanic_survival[0:10]) #显示前10个数据
重置索引:
titanic_reindexed = new_titanic_survival.reset_index(drop=True)print(titanic_reindexed.loc[0:10])
返回第 100 个乘客的信息
def hundredth_row(column): # Extract the hundredth item hundredth_item = column.loc[99] return hundredth_item
# Return the hundredth item from each columnhundredth_row = titanic_survival.apply(hundredth_row)print (hundredth_row)
表的每列中为空的个数
def null_count(column): column_null = pd.isnull(column) null = column[column_null] return len(null)
column_null_count = titanic_survival.apply(null_count)print (column_null_count)
分别计算成年与未成年人的生还概率
首先,对乘客进行分类,以 18 岁为标准
def generate_age_label(row): age = row["Age"] if pd.isnull(age): return "unknown" elif age return "minor" else: return "adult"
age_labels = titanic_survival.apply(generate_age_label, axis=1)print (age_labels)
计算生还该概率
titanic_survival['age_labels'] = age_labelsage_group_survival = titanic_survival.pivot_table(index="age_labels", values="Survived")print (age_group_survival)
pandas pivot 计算占比_数据分析Pandas 基础(二)相关推荐
- pandas pivot 计算占比_pandas使用9:如何处理时间序列数据
如何处理时间序列数据? import pandas as pdimport matplotlib.pyplot as plt air_quality = pd.read_csv("data/ ...
- python pandas 读取数据库_数据分析-pandas从数据库读取数据
数据分析-pandas从数据库读取数据 使用pandas读取数据到DataFrame,对于只是数据分析来说,重点是读取数据,读取数据过程越简单越好,并不需要写得很复杂显得自己很厉害的样子.最好就是代码 ...
- pandas 每一列相加_Python数据分析——Pandas 教程(上)
Python 在数据分析领域里是一门非常强大的语言,在数据分析方面有着出色的生态系统.Pandas 包就是其中之一,它的主要特点是导入和分析数据非常的容易,Pandas 类似 Numpy.Matplo ...
- pandas to_csv参数详解_【Python基础】Pandas数据可视化原来也这么厉害
一.可视化概述 在Python中,常见的数据可视化库有3个: matplotlib:最常用的库,可以算作可视化的必备技能库,比较底层,api多,学起来不太容易. seaborn:是建构于matplot ...
- python计算学生年龄_用pandas快速统计学生年龄班级等分组信息
最近收到一个求助邮件,他的需求如下: 我是小学的一名统计员,因长期做统计工作,近期,自学一点python,但如何把excel中的8位数出生日期转成年龄,一直做不好,现请您帮忙一下,不知能否帮! 这个问 ...
- pandas 提取某几列_用Pandas做数据清洗,我一般都这么干……
导读:作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤.一般而言,当提及数据清洗时,其实是主要包括了缺失值处理.重复值处理和异常值处理三类操作,本文即围绕这这三个方 ...
- pandas 提取某几列_用pandas做数据清洗,我一般都这么干
导读 作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤.一般而言,当提及数据清洗时,其实是主要包括了缺失值处理.重复值处理和异常值处理三类操作,本文即围绕这这三个方面 ...
- pandas转mysql特定列_在pandas.DataFrame.to_sql时指定数据库表的列类型
问题 在数据分析并存储到数据库时,Python的Pandas包提供了to_sql 方法使存储的过程更为便捷,但如果在使用to_sql方法前不在数据库建好相对应的表,to_sql则会默认为你创建一个新表 ...
- pandas分组计算平均值_python – 如何计算在Pandas中另一列上分组的平均值
对于以下数据帧: StationID HoursAhead BiasTemp SS0279 0 10 SS0279 1 20 KEOPS 0 0 KEOPS 1 5 BB 0 5 BB 1 5 我想得 ...
最新文章
- Openstack Nova 源码分析 — Create instances (nova-conductor阶段)
- 华为融合电信云解决方案包括_运营商这“一朵云”怎么建?使能者华为的解决之道...
- 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层
- 2021-08-19初识JSP
- 悦诗风吟网络营销的目标_睫毛膏营销策划方案
- 如何重新编辑排版错乱的PDF文件
- 电脑文件的后缀名不见了,如何显示隐藏扩展名?
- cocos2d-x 3.17.2 调用cocos studio发布的csb文件,遇到按钮图片显示不正常问题
- 现实版“武大郎和潘金莲”的婚姻情感纠葛
- RenderTexture 橡皮檫 电筒效果
- 鸿蒙内测公测时间,华为鸿蒙内测公测升级申请方法
- 一辞脚本分享的导入抖音号关注私信脚本,导入抖音号关注私信软件详细教学
- 一封来自远方的信....
- 2022年宜昌助理工程师职称评审流程和条件是什么呢?甘建二
- 写一个简单的Java界面程序
- 报表制作开源工具hcharts
- Spring整合AMQ
- 机械手-自动送料机械手的设计【说明书(论文)+CAD图纸+液压系统+开题报告+外文翻译+答辩ppt)
- spring-整合spring data jpa
- S-function入门及案例详解(3)——S-function进阶案例