当前位置: 首页 > news >正文

数据处理和统计分析——04 Pandas DataFrame

1 Pandas DataFrame简介

  • Pandas是用于数据分析的开源Python库,可以实现数据加载,清洗,转换,统计处理,可视化等功能;
  • DataFrame和Series是Pandas最基本的两种数据结构;
  • DataFrame用来处理结构化数据(SQL数据表,Excel表格);
  • Series用来处理单列数据,也可以把DataFrame看作由Series对象组成的字典或集合

2 加载数据集

  • 目的:

    • 做数据分析首先要加载数据,并查看其结构和内容,对数据有初步的了解;
    • 查看行,列数据分布情况;
    • 查看每一列中存储的信息的类型;
  • 步骤:

    • tsv,即Tab-Separated Values

    在这里插入图片描述

  • 查看数据类型及属性:

    在这里插入图片描述

  • Pandas和Python常用数据类型对照

    Pandas 类型Python 类型说明
    Objectstring字符串类型
    int64int整形
    float64float浮点型
    datetime64datetime日期时间类型

3 查看部分数据

3.1 根据列名加载部分列数据

  • df['列名']:加载一列数据

    在这里插入图片描述

  • df[['列名1','列名2',...]]:加载多列数据

    • 注意:这里是两层[],可以理解为df[列名的list]

    在这里插入图片描述

3.2 按行加载部分数据

  • 行索引介绍:

    • 最左边一列是行号,也就是DataFrame的行索引;
    • Pandas默认使用行号作为行索引;

    在这里插入图片描述

  • loc[]:传入单个或多个行索引,可以获取到DataFrame的单行或多行数据

    • 注意:若传入多个行索引,那么这多个行索引必须是一个列表;

    在这里插入图片描述

  • tail():获取最后一行数据

    在这里插入图片描述

  • 可以组合使用:

    在这里插入图片描述

3.3 lociloc

  • 在 Python 的pandas库中,lociloc都是用于数据选取的索引器,但它们在使用方式和选取依据上存在明显区别;

    • loc:基于**标签(label)**来选取数据。这里的标签可以是行索引标签、列索引标签。比如在一个 DataFrame 中,如果行索引是自定义的字符串,像['row1', 'row2'],或者是数值但表示特定含义(非默认整数位置) ,就可以用loc按照这些自定义的标签来获取数据;
    • iloc:基于**整数位置(integer position)**来选取数据。它把 DataFrame 的行和列看作是从 0 开始编号的数组,通过整数位置来访问特定的行和列;
  • 例:假设有如下的DataFrame

    在这里插入图片描述

    • loc的使用:

      在这里插入图片描述

    • iloc的使用:

      在这里插入图片描述

  • 切片操作区别

    • loc切片:使用loc进行切片时,端点是包含的。比如df.loc['a':'b'] ,会返回索引标签从'a''b'的所有行(包含'a''b');
    • iloc切片:使用iloc进行切片时,端点是不包含的,类似 Python 普通的列表切片规则。比如df.iloc[0:2] ,会返回位置从 0 到 1(不包含 2)的行,也就是第一行和第二行;
  • 布尔索引:

    • locloc可以接受布尔型的Series或者DataFrame来进行数据筛选。例如df.loc[df['Age'] > 28] ,会返回Age列中值大于 28 的所有行;
    • ilociloc也可以使用布尔型的Series来筛选行,但不能直接使用布尔型DataFrame筛选列(除非转换为整数位置的形式) ,比如df.iloc[(df['Age'] > 28).values](df['Age'] > 28).values将布尔型Series转换为布尔型数组 ,以此筛选出行。

3.4 获取指定行或列的数据

  • 先来看一下df中有哪些列:

    在这里插入图片描述

  • df.loc[ : , [列名]]:取出所有行的一列或多列

    在这里插入图片描述

  • df.iloc[ : , [列序号]]:取出所有行的一列或多列。列序号可以使用-1代表最后一列

    在这里插入图片描述

  • 通过range()生成序号,结合iloc获取连续多列数据

    在这里插入图片描述

    在这里插入图片描述

  • iloc中使用切片语法获取几列数据

    在这里插入图片描述

    在这里插入图片描述

  • 使用lociloc获取指定行,指定列的数据

    在这里插入图片描述

  • 获取多行多列:

    在这里插入图片描述

4 分组-聚合计算

4.1 简介

  • 在我们使用Excel或者SQL进行数据处理时,Excel和SQL都提供了基本的统计计算功能;

  • 当我们再次查看gapminder.tsv的数据的时候,可以根据数据提出几个问题:

    • 每一年的平均预期寿命是多少?每一年的平均人口和平均GDP是多少?
    • 如果我们按照大洲来计算,每个大洲的平均预期寿命,平均人口,平均GDP情况又如何?
    • 在数据中,每个大洲列出了多少个国家和地区?
  • 对于上面提出的问题,需要进行分组-聚合计算

    • 先将数据分组(比如对于第一个问题的第一个小问,可以按照年份将相同年份的数据分成一组);
    • 对每组的数据再去进行统计计算,如:求平均,求每组数据条目数(频数)等;
    • 再将每一组计算的结果合并起来。

4.2 分组-聚合方式

  • 对于第一个问题的第一个小问,可以按照年份将相同年份的数据分成一组:可以使用DataFrame的groupby()方法完成分组-聚合计算

    在这里插入图片描述

  • 若想要的得到的返回结果是 DataFrame:

    在这里插入图片描述

  • 对多列进行分组聚合

    在这里插入图片描述

  • 对单列多项进行分组聚合

    在这里插入图片描述

4.3 分组频数计算

  • nunique():计算每个分组中唯一值的数量;

    在这里插入图片描述

  • value_counts():计算每个分组中每个值出现的次数;

    在这里插入图片描述

5 基本绘图

  • 对某个 Series 对象调用 plot() 方法,pandas 会自动使用 matplotlib 库来绘制一个折线图;

    在这里插入图片描述

    • x 轴是年份(year),y 轴是平均预期寿命(lifeExp 的平均值)
http://www.dtcms.com/a/304954.html

相关文章:

  • Python的‌魔法方法‌
  • Java学习第八十七部分——四次挥手
  • Java设计模式之《备忘录模式》
  • 80V降5V,输出电流4A,应用于车载充电器
  • 工厂方法模式 Factory Method Pattern
  • 监控场景视频质量异常修复:陌讯动态增强算法实战解析
  • 深入浅出设计模式——创建型模式之建造者模式 Builder
  • LangChain API 功能介绍和使用示例
  • 单卡10分钟部署MiniCPM4-0.5B:轻量级大模型本地运行指南
  • ESP8266 AT 固件
  • Linux信号量:进程同步与互斥的核心机制
  • 人形机器人指南(十四)集成
  • 248°视野里的温柔革命:当清洁成为治愈城市的艺术
  • Qt 移动应用界面设计原则
  • 智能Agent场景实战指南 Day 23 : Agent安全与隐私保护
  • C++异常捕获:为何推荐按引用(by reference)捕获?
  • 【LeetCode 热题 100】(二)双指针
  • 基于Java+SQLServer2017实现(Web)酒店客房管理系统
  • MongoDB系列教程-教程概述
  • 系统选择菜单(ubuntu grub)介绍
  • 标量子查询 外表有多少重复值决定filter次数 转化 left join
  • Python三大Web框架:FastAPI vs Flask vs Django 详解与快速入门指南
  • BreachForums 黑客论坛强势回归
  • windows软件ARM64和AMD64(x64)区别,如何查看电脑支持哪种
  • JVM易混淆名称
  • 大型微服务项目:听书——多端重复提交订单问题适配器模式实现不同支付方式的选择零钱支付逻辑
  • 爬虫逆向之瑞数五案例:某某医学院(补环境,联调)
  • 适配器模式的三种C++实现
  • 宠物经济行业研究系列报告
  • electron-vite 动态加载脚本 实现动态插件