实战Kaggle泰坦尼克数据集,玩转Pandas透视表 | 强烈推荐

Pandas - 9.1 apply应用 titanic=sns.load_dataset(‘titanic’)命令会因为网络原因报错。带有参数的函数,需要额外指定参数,函数的第一个变量是Serise的元素。需求计算titanic每一行或每一列的完整案例(不含缺失值)的百分比。cache=True时,会根据data_home的路径来加载数据集。DataFrame需要指定按行还是按列应用函数。需要手动下载,然后从本地导入。... 阅读详情

数据透视表(Pivot Table)是常用的数据汇总工具,可以通过控制数据的排列灵活地进行数据分析,进而挖掘出数据中最有价值的信息。掌握数据透视表,已经成为数据分析从业者必备的一项技能。

在python中我们可以通过pandas.pivot_table函数来实现数据透视表的功能。本篇文章介绍了pandas.pivot_table具体的使用方法,在最后还准备了一个备忘单,希望能够帮助你记住如何使用pandas的pivot_table。

本文结构

640?wx_fmt=png


1. 实例数据加载及预处理

本文采用kaggle赛题”泰坦尼克号“中的数据,案例背景是,船要沉了,我们根据各种影响因素,判断船上成员的存活率,比如头等舱的人存活率是不是会更高呢?或者女人比男人活下来的概率更高呢?

# 加载数据
import numpy as np
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')

# 删除不重要的列
df.drop(columns =["who","adult_male","deck","embark_town","alive","alone","class"],inplace=True)

# 缺失值处理
df = df[df["embarked"].notnull()]
df["age"].fillna(df["age"].mean(),inplace=True)

# age离散化
df["age"] = pd.cut(df["age"], [0, 18, 90])

df.head()

640?wx_fmt=png

主要字段的含义如下:

640?wx_fmt=png


2. 第一个透视表

# 查看不同性别的存活率
table = pd.pivot_table(df, index=["sex"], values="survived")
print(table)
        survived
sex             
female  0.740385
male    0.188908

可见女性的存活率很高,说明当时船上的男人们还是很绅士的哈哈~~

参数说明:

  • df是要传入的数据;

  • index是 Values to group by in the rows,也就是透视表建立时要根据哪些字段进行分组,我们这里只依据性别分组;

  • values是指对哪些字段进行聚合操作,因为我们只关心不同性别下的存活率情况,所以values只需要传入一个值"survived";

  • 将所有乘客按性别分为男、女两组后,对"survived"字段开始进行聚合,默认的聚合函数是"mean",也就是求每个性别组下所有成员的"survived"的均值,即可分别求出男女两组各自的平均存活率。

3. 添加列索引

# 添加一个列级分组索引:pclass-客票级别,共有1,2,3三个级别,1级别最高。
table = pd.pivot_table(df, index=["sex"], columns=["pclass"], values="survived")
print(table)
pclass         1         2         3
sex                                 
female  0.967391  0.921053  0.500000
male    0.368852  0.157407  0.135447

可以发现,无论是男性还是女性,客票级别越高的,存活率越高。

4. 多级行索引

# 添加一个行级分组索引:pclass-客票级别
table = pd.pivot_table(df, index=["sex","pclass"], values="survived")
print(table)
               survived
sex    pclass          
female 1       0.967391
       2       0.921053
       3       0.500000
male   1       0.368852
       2       0.157407
       3       0.135447

添加一个行级索引"pclass"后,现在透视表具有二层行级索引,一层列级索引。仔细观察透视表发现,与上面【3】中的"添加一个列级索引",在分组聚合效果上是一样的,都是将每个性别组中的成员再次按照客票级别划分为3个小组。

不同点就在于,看你是想让表格的行数多一点,还是想让列数多一点~~

5. 多级列索引

# 构造两层列级索引:"pclass"和"age"
table = pd.pivot_table(df, index=["sex"], columns=["pclass","age"], values="survived")
print(table)
pclass         1                 2                   3          
age      (0, 18]  (18, 90] (0, 18]  (18, 90]   (0, 18]  (18, 90]
sex                                                             
female  0.909091  0.975309     1.0  0.903226  0.511628  0.495050
male    0.800000  0.350427     0.6  0.086022  0.215686  0.121622

添加两层列级索引后,分析透视表,可以发现,一级客票的成年女性存活率高达97.5%,存活率最低的是三级客票的未成年男孩。

当然,行索引和列索引都可以再设置为多层,不过,行索引和列索引在本质上是一样的,大家需要根据实际情况合理布局。

6. 添加多个聚合列

# 按客票级别分组,每组对两个列进行聚合:“是否存活”和“船票价”
table = pd.pivot_table(df, index=["pclass"], values=["survived","fare"])
print(table)
             fare  survived
pclass                     
1       84.193516  0.626168
2       20.662183  0.472826
3       13.675550  0.242363

可以发现,船票级别越高,票价越高,存活率也越高。。。

需要注意的是,如果不传入values参数,将对除index和columns之外的所有剩余列进行聚合。

# 不传入values参数,剩余的所有列均做聚合(默认是均值聚合)。
table = pd.pivot_table(df, index=["pclass"])
print(table)
# 因为没有指定聚合函数,离散列又不能求均值,因此离散列在下面不会列出。
             fare     parch     sibsp  survived
pclass                                         
1       84.193516  0.359813  0.420561  0.626168
2       20.662183  0.380435  0.402174  0.472826
3       13.675550  0.393075  0.615071  0.242363


7. 自定义聚合函数

# 指定聚合函数
table = pd.pivot_table(df, index=["pclass"], values=["survived", "fare"], aggfunc=["mean", sum, "count"])
print(table)
             mean                   sum          count         
             fare  survived        fare survived  fare survived
pclass                                                         
1       84.193516  0.626168  18017.4125      134   214      214
2       20.662183  0.472826   3801.8417       87   184      184
3       13.675550  0.242363   6714.6951      119   491      491

聚合函数支持常见的统计函数,如"mean", "sum", count, np.mean, np.std, np.corr等,支持字符串等多种格式。

  • 如果传入参数为list,则每个聚合函数对每个列都进行一次聚合。

  • 如果传入参数为dict,则每个列仅对其指定的函数进行聚合,此时values参数可以不传。

   示例如下:

# aggfunc传入字典类型,自定义每个列要适用的聚合函数
table = pd.pivot_table(df, index=["pclass"], aggfunc={"survived": ["mean", sum], "fare": ["count", np.std]})
print(table)
        fare             survived       
       count        std      mean    sum
pclass                                  
1        214  78.746457  0.626168  134.0
2        184  13.417399  0.472826   87.0
3        491  11.778142  0.242363  119.0


8. 添加汇总项

# 按行、按列进行汇总,指定汇总列名为“Total”,默认名为“ALL”
table1 = pd.pivot_table(df, index="sex", columns="pclass", values="survived", aggfunc= "count", margins=True, margins_name="Total")
print(table1)
pclass    1    2    3   Total
sex                         
female   92   76  144    312
male    122  108  347    577
Total   214  184  491    889


9. 保存透视表

数据分析的劳动成果最后当然要保存下来了,我们一般将透视表保存为excel格式的文件,如果需要保存多个透视表,可以添加到多个sheet中进行保存

save_file = "./titanic_analysis.xlsx"
with pd.ExcelWriter(save_file) as writer: 
    table.to_excel(writer, sheet_name='汇总-演示', encoding="utf-8")
    table1.to_excel(writer, sheet_name='自定义聚合函数-演示', encoding="utf-8")

excel保存格式如下:

640?wx_fmt=png


10. 备忘单

为了试图总结所有这一切,本文创建了一个备忘单,希望它能够帮助你记住如何使用pandas的pivot_table。

640?wx_fmt=png

觉得不错,记得点个在看哦!

python加载数据集出现:URLError: <urlopen error [WinError 10054] 一、问题原因 加载seaborn自带的在线数据集“titanic” 时,出现了以下报错: import seaborn as sns data = sns.load_dataset('titanic') data.head(5) # 查看前5条具体数据 查阅资料发现,报错原因为该下载链接需要连接外网。 二、解决办法 进入数据集网站 将数据集下载到本地,再从本地文件夹中导入数据 。 1、进入数据集网站(GitHub - mwaskom/seaborn-data: Data repositor 阅读详情

相关推荐

数据分析师入门到求职:Excel/SQL/Tableau/Python全栈学习路径与实战指南

1. 先搞清楚这套课程到底能帮你解决什么问题 如果你正在考虑转行数据分析,或者想系统提升自己的数据分析能力,面对网上铺天盖地的“Excel/SQL/Tableau/Python”课程,最怕的就是学了一堆零散工具,最后简历上还是写不出东西,面试也答不到点上。 这套被广泛传播的“全79集”数据分析自学课程,核心价值不在于它有多少集,而在于它把数据分析师从入门到求职的完整技能栈,按照一个清晰的路径串起来了。它解决的不是“某个软件怎么用”的孤立问题,而是“如何用这些工具组合起来,完成一个真实的数据分析项目,并最终找

weixin_34101784的博客 415

sns seaborn 画图 titanic iris dataset

​%matplotlib inline import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns sns.set(color_codes=True) np.random.seed(sum(map(ord, ‘regress...

qq_38844711的博客 583

数据分析入门:Excel、SQL、Python、BI工具链实战学习路径

这类数据分析入门教程,最核心的价值不是罗列工具,而是帮你理清一个清晰的、可执行的、从零到一的学习路径。很多人一上来就扎进某个软件或编程语言,学了一堆函数和语法,但面对真实数据时依然无从下手。一套好的教程,应该像一份“地图”,告诉你先学什么、后学什么、每个阶段解决什么问题、以及如何把Excel、Python、SQL、BI这些工具串联起来,真正完成一个数据分析项目。 我建议你先别急着找资源下载,而是花几分钟搞清楚这套“组合拳”的打法。数据分析的核心流程无非是: 获取数据 -> 清洗整理 -> 分析建

weixin_34034670的博客 447

【数据分析与可视化】利用Python对泰坦尼克号幸存者数据分析与可视化(附源码)

【数据分析与可视化】利用Python对泰坦尼克号幸存者数据分析与可视化(附源码)

showswoller的博客 3792

数据分析入门:Excel、SQL、Tableau、Python四件套学习路径与实战指南

想转行数据分析,但面对Excel、SQL、Tableau、Python这一堆工具,是不是感觉无从下手?网上教程要么太散,要么太深,要么直接劝退。更让人焦虑的是,学了半天,简历上还是写不出能拿得出手的项目,面试官一问就露馅。 这恰恰是大多数自学数据分析者最大的痛点: 学了一堆零散技能,却无法串联成一个解决实际商业问题的完整能力 。你可能会用Python画个图,但不知道如何从零开始梳理业务需求;你背熟了SQL语法,但面对复杂的多表关联和性能优化依然发怵;你听说过Tableau,但不知道如何用它讲出一个让老板点头

weixin_34262482的博客 430

加权词频分析:用pandas和defaultdict挖掘文本中的真实价值

词频分析是文本挖掘的基础技术,但绝对频次常掩盖业务本质——真正重要的是每个词所承载的加权价值。本文从注意力经济视角切入,解析加权词频(weighted frequency)如何通过关联数值标签(如票房、GMV、完播率)将文字转化为可决策信号;其核心在于构建‘单位词频权重’(rel_value)指标,实现从‘数出现次数’到‘算单次价值’的思维跃迁。结合pandas高效排序与defaultdict双状态计数能力,该方法已在电影票房归因、电商搜索优化及内容平台标题A/B测试中验证有效性。适合处理带销量、互动量、时

weixin_30698297的博客 317

sqlyog表添加列_实战Kaggle泰坦尼克数据集,玩转Pandas透视表 | 强烈推荐

数据透视表(Pivot Table)是常用的数据汇总工具,可以通过控制数据的排列灵活地进行数据分析,进而挖掘出数据中最有价值的信息。掌握数据透视表,已经成为数据分析从业者必备的一项技能。在python中我们可以通过pandas.pivot_table函数来实现数据透视表的功能。本篇文章介绍了pandas.pivot_table具体的使用方法,在最后还准备了一个备忘单,希望能够帮助你记住如...

weixin_39756192的博客 277

第二十五天-Seaborn数据可视化库

1.与matplotlib区别2.基于matplotlib进行开发的,更高效更高阶的绘制图表。

qq_34960590的博客 1252

python-pandas-数据处理

实战Kaggle泰坦尼克数据集,玩转Pandas透视表 | 强烈推荐 1. 实例数据加载及预处理 本文采用kaggle赛题”泰坦尼克号“中的数据,案例背景是,船要沉了,我们根据各种影响因素,判断船上成员的存活率,比如头等舱的人存活率是不是会更高呢?或者女人比男人活下来的概率更高呢? # 加载数据 import numpy as np import pandas as pd import seabo...

Mr_WoLong 634

Titanic-Data-Analysis:这是泰坦尼克号乘客的数据分析

泰坦尼克号数据分析 这是泰坦尼克号乘客的数据分析

Kaggle泰坦尼克号数据集.zip

题目提供的训练数据集包含11个特征,分别是: Survived:0代表死亡,1代表存活 Pclass:乘客所持票类,有三种值(1,2,3) Name:乘客姓名 Sex:乘客性别 Age:乘客年龄(有缺失) SibSp:乘客兄弟姐妹/配偶的个数(整数值) Parch:乘客父母/孩子的个数(整数值) Ticket:票号(字符串) Fare:乘客所持票的价格(浮点数,0-500不等) Cabin:乘客所在船舱(有缺失) Embark:乘客登船港口:S、C、Q(有缺失)

数据分析师一个月速成指南:从Excel到Python的完整技能栈

很多同学想转行数据分析,但面对Excel、SQL、Python、PowerBI等一堆工具,常常感到无从下手,不知道从哪里开始,也不知道如何系统性地学习。网上资料虽然多,但往往零散不成体系,学了很久感觉还是在原地打转。 本文旨在为你提供一份清晰、可执行、覆盖核心技能栈的“一个月速成”学习路径。这不是一个轻松的过程,需要你投入大量时间和精力,但通过结构化的学习,你可以快速掌握数据分析师的核心工作流和必备技能。我们将从数据分析思维入手,逐步深入到Excel、SQL、指标体系、PowerBI和Python数据分析,

weixin_33970449的博客 354

狗都能看懂的Proximal Policy Optimization(PPO)PPO算法详解

李宏毅老师的PPO算法讲解笔记

个人学习笔记 2万+

pandas泰坦尼克号

学习学习学习学习学习学习学习

si6354257的博客 794

Qt·DBus快速入门

DBus快速入门

m0_64560763的博客 2273

51单片机基础知识

前言 周末闲着无聊,以后定时更新一期关于51单片机的学习案例,以供大家平时参考使用。至于单片机,你可以理解为人的大脑,而人各项身体器官的运作需要意识给到大脑,然后大脑再驱动我们的中枢神经进行相应的动作,这里的意识可以理解为我们要写的程序,而人的器官相当于各种输出设备,例如我们以后要学的LED、电机、各种传感器等等。学好单片机能让你找到一份相对不错的工作,当然越可观的东西也是要付出相应努力的。 一、51单片机是什么? 通常我们一说到 51 单片机,指的都是兼容IntelMCS-51体系架构的一系列单片机,而

qq_43537819的博客 6905

机器学习泰坦尼克号乘客生还情况 ——数据集无法获取解决

在机器学习实验例子 泰坦尼克号乘客生还情况 链接无法进入 数据无法下载解决方法

shanhe_yuchuan的博客 1528

基于VH6501的Busoff测试

摘要: 本文介绍使用VH6501和CANoe工具测试ECU的Busoff Recovery机制。通过干扰报文触发Busoff状态,验证快恢复(连续32次,间隔100ms)和慢恢复(间隔1000ms)的时序及次数是否符合要求。测试步骤包括硬件配置、干扰参数设置及Trace窗口错误帧分析,最终通过错误帧间隔判定恢复机制的正确性。

酒酿丸子的博客 1039

L:python的Pandas模块:实例练习(泰坦尼克号数据集分析,电影票房统计,股票基本面统计)

实例练习 泰坦尼克号数据集分析 使用Seaborn库中包含的titanic数据集进行一些数据统计。 Seaborn是一个图形库,Anaconda已包含此库。数据集参见: https://github.com/mwaskom/seaborn-data import seaborn as sns tit = sns.load_dataset('titanic') # 读取数据集, 返回 DataFrame tit.shape Out: (891, 15) # 891行x15列 tit.head(

入梦镜 2820

Apple CarPlay Certification Guide December 2022 解析V1.0

Apple CarPlay Certification Guide December 2022更新说明

m0_74450450的博客 703

YOLO26改进策略【卷积层】| CVPR 2024 可变形卷积 v4(DCNv4)无界权重提表达 + 线程合并降冗余,强化模型收敛速度

DCNv4(Deformable Convolution v4)是一种专为广泛视觉应用设计的高效算子,它对DCNv3进行了关键改进,有效解决了DCNv3存在的速度慢和表达能力受限等问题。

Limiiiing的博客 694

Seaborn 绘制 21 种超实用精美图表

????点击关注|设为星标|干货速递????大家好,我是辰哥~导读:做过可视化的小伙伴们都会经常听到seaborn可视化,也有很多大佬平时使用的较多的可视化库,今天我们就来盘下他,看看他有多实在。...

公众号:Python研究者 5121

(三)UPF之Domain Coverage Relationship(Cover、Equivalent、Independent)

整个Soc架构中一般会存在多个Power Domain,不同的Power Domain之间也存在着一定的Coverage关系。在Cadence工具中,这种。不同的Domain Coverage关系中,各个Domain存在着一定的关联()。

Mr.翟的博客 1424

泰坦尼克号数据集_机器学习(入门)--Kaggle项目之泰坦尼克号

电影《泰坦尼克号》改编自一个真实故事。1912年4月15日,这艘号称“永不沉没”的泰坦尼克号在首航期间,撞上冰山后沉没,船上的2224名乘客和机组人员,其中只有772人存活下来,生还率只有32%。 这一耸人听闻的悲剧震撼了国际社会,并导致了更好的船舶安全条例。一,提出问题什么人在泰坦尼克号上更容易存活?二,理解数据采集数据数据来源于kaggle网站Titanic项目,如下链接可下载数...

weixin_39618169的博客 2073

【同等学力】2005-数学⭐✨

有r个正方形排成一行,今用红、黄、白、蓝四种颜色给这个r个正方形染色,每个正方形只能染一种颜色,如果要求染红、黄、白色的正方形分别至少出现一个,问有多少种不同的染法?3、(4分)设G是一个有n个结点m条边的连通简单平面图,若n≥3,则m≤3n-6.4、(4分)证明:任何连通简单平面图至少有一个结点的度数不超过5

super_mochi1 306

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 我是如何通过开源项目月入 10 万的?
下一篇: 送书来了,精选机器学习好书,送书5本
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值