推荐阅读:数据分析--Pandas 基础(一)

上一节课介绍了 Pandas 的基本用法,这一章节我们通过对 “泰坦尼克号” 幸存者进行数据分析,来进一步的学习 pandas。

titanic_train.csv

网盘链接:链接:https://pan.baidu.com/s/1hGc19QAGV6H-hDtOdz-GpQ 提取码:sgu8

image-20200618091812300

数据简介:

  • 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() #查看前几行数据

image-20200618091440524

在 pandas 中,使用 NaN 表示数据为空,表示数据缺失

使用 .isnull()函数判断一列数据是否为空

age = titanic_survival["Age"]age_is_null = pd.isnull(age)print(age_is_null)

image-20200618094104841

查看空数据情况

age_null_true = age[age_is_null]print (age_null_true)

image-20200618094407869

上图显示出,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号数据被过滤

image-20200618095203606

过滤掉空数据,再计算均值:

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 为值,计算生还概率

image-20200618114805599
passenger_survival = titanic_survival.pivot_table(index="Pclass", values='Survived', aggfunc=np.mean)print(passenger_survival)

image-20200618114626768

舱位选择的平均年龄

passenger_age = titanic_survival.pivot_table(index="Pclass", values="Age")print(passenger_age)

image-20200618121606952

以 上船距离为索引,费用和生还人数为值

port_stats = titanic_survival.pivot_table(index="Embarked", values=["Fare","Survived"], aggfunc=np.sum)print(port_stats)

image-20200618202225249

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)

image-20200618202841715

如下图,通过对比可以发现,“Age”列的第 888 行为空,被去除

image-20200618203144439

生还者按照年龄降序排列

new_titanic_survival = titanic_survival.sort_values("Age",ascending=False)print (new_titanic_survival[0:10]) #显示前10个数据

image-20200618204725623

重置索引:

titanic_reindexed = new_titanic_survival.reset_index(drop=True)print(titanic_reindexed.loc[0:10])

image-20200618211141628

返回第 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)

image-20200618211108414

表的每列中为空的个数

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)

image-20200618211527756

分别计算成年与未成年人的生还概率

首先,对乘客进行分类,以 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)

image-20200618212156587

计算生还该概率

titanic_survival['age_labels'] = age_labelsage_group_survival = titanic_survival.pivot_table(index="age_labels", values="Survived")print (age_group_survival)

image-20200618212419599

pandas pivot 计算占比_数据分析Pandas 基础(二)相关推荐

  1. pandas pivot 计算占比_pandas使用9:如何处理时间序列数据

    如何处理时间序列数据? import pandas as pdimport matplotlib.pyplot as plt air_quality = pd.read_csv("data/ ...

  2. python pandas 读取数据库_数据分析-pandas从数据库读取数据

    数据分析-pandas从数据库读取数据 使用pandas读取数据到DataFrame,对于只是数据分析来说,重点是读取数据,读取数据过程越简单越好,并不需要写得很复杂显得自己很厉害的样子.最好就是代码 ...

  3. pandas 每一列相加_Python数据分析——Pandas 教程(上)

    Python 在数据分析领域里是一门非常强大的语言,在数据分析方面有着出色的生态系统.Pandas 包就是其中之一,它的主要特点是导入和分析数据非常的容易,Pandas 类似 Numpy.Matplo ...

  4. pandas to_csv参数详解_【Python基础】Pandas数据可视化原来也这么厉害

    一.可视化概述 在Python中,常见的数据可视化库有3个: matplotlib:最常用的库,可以算作可视化的必备技能库,比较底层,api多,学起来不太容易. seaborn:是建构于matplot ...

  5. python计算学生年龄_用pandas快速统计学生年龄班级等分组信息

    最近收到一个求助邮件,他的需求如下: 我是小学的一名统计员,因长期做统计工作,近期,自学一点python,但如何把excel中的8位数出生日期转成年龄,一直做不好,现请您帮忙一下,不知能否帮! 这个问 ...

  6. pandas 提取某几列_用Pandas做数据清洗,我一般都这么干……

    导读:​作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤.一般而言,当提及数据清洗时,其实是主要包括了缺失值处理.重复值处理和异常值处理三类操作,本文即围绕这这三个方 ...

  7. pandas 提取某几列_用pandas做数据清洗,我一般都这么干

    导读 作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤.一般而言,当提及数据清洗时,其实是主要包括了缺失值处理.重复值处理和异常值处理三类操作,本文即围绕这这三个方面 ...

  8. pandas转mysql特定列_在pandas.DataFrame.to_sql时指定数据库表的列类型

    问题 在数据分析并存储到数据库时,Python的Pandas包提供了to_sql 方法使存储的过程更为便捷,但如果在使用to_sql方法前不在数据库建好相对应的表,to_sql则会默认为你创建一个新表 ...

  9. pandas分组计算平均值_python – 如何计算在Pandas中另一列上分组的平均值

    对于以下数据帧: StationID HoursAhead BiasTemp SS0279 0 10 SS0279 1 20 KEOPS 0 0 KEOPS 1 5 BB 0 5 BB 1 5 我想得 ...

最新文章

  1. Openstack Nova 源码分析 — Create instances (nova-conductor阶段)
  2. 华为融合电信云解决方案包括_运营商这“一朵云”怎么建?使能者华为的解决之道...
  3. 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层
  4. 2021-08-19初识JSP
  5. 悦诗风吟网络营销的目标_睫毛膏营销策划方案
  6. 如何重新编辑排版错乱的PDF文件
  7. 电脑文件的后缀名不见了,如何显示隐藏扩展名?
  8. cocos2d-x 3.17.2 调用cocos studio发布的csb文件,遇到按钮图片显示不正常问题
  9. 现实版“武大郎和潘金莲”的婚姻情感纠葛
  10. RenderTexture 橡皮檫 电筒效果
  11. 鸿蒙内测公测时间,华为鸿蒙内测公测升级申请方法
  12. 一辞脚本分享的导入抖音号关注私信脚本,导入抖音号关注私信软件详细教学
  13. 一封来自远方的信....
  14. 2022年宜昌助理工程师职称评审流程和条件是什么呢?甘建二
  15. 写一个简单的Java界面程序
  16. 报表制作开源工具hcharts
  17. Spring整合AMQ
  18. 机械手-自动送料机械手的设计【说明书(论文)+CAD图纸+液压系统+开题报告+外文翻译+答辩ppt)
  19. spring-整合spring data jpa
  20. S-function入门及案例详解(3)——S-function进阶案例

热门文章

  1. 羽毛球比赛裁判常用英语术语
  2. 注入工具的原理和开发
  3. C语言头文件避免重复包含
  4. 静态成员变量的初始化,vector类型变量初始化
  5. WebBrowser 操作(从网上收集)
  6. C++继承中的同名成员变量处理方法
  7. linux_unix编程手册--信号处理函数
  8. eclipse左侧框不见了怎么办
  9. python基础——导入模块
  10. 逆序输出(数组练习)