【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame

news2025/2/1 14:55:41

文章目录

  • 前言
  • 一、DataFrame创建
    • 1.1 字典创建
    • 1.2 NumPy二维数组创建
  • 二、DataFrame切片
    • 2.1 行切片
    • 2.2 列切片
    • 2.3 行列切片
  • 三、DataFrame运算
    • 3.1 DataFrame和标量的运算
    • 3.2 DataFrame之间的运算
    • 3.3 Series和DataFrame之间的运算
  • 四、DataFrame多层次索引
    • 4.1 多层次索引构造
        • 1.隐式构造
        • 2.显式构造
    • 4.2 DataFrame多层索引的索引
        • 1.获取元素
        • 2.列索引&行索引
    • 4.3 DataFrame多层索引的切片操作
  • 五、索引的堆叠
  • 六、聚合操作
  • 结语
  • 相关导读

前言

大家好!我是一朵向阳花(花花花)🍭,本期跟大家分享的知识是 pandas 数据结构——DataFrame。

作者的【 Python 数据分析】专栏正在火热更新中🔥,如果本文对您有帮助,欢迎大家点赞 + 评论 + 收藏 !

每日金句分享:慢慢来,谁还没有一个努力的过程。』—— pony「网易云音乐」

一、DataFrame创建

DataFrame 是一个表格型的数据结构,DataFrame 既有行索引,又有列索引。

  • index行索引
  • column列索引
  • values二维 NumPy 数组

1.1 字典创建

字典创建时,字典的键变成 column ,值一般要是一个可迭代对象。

d = {
    'name':['John','marry','kitty','smith'],
    'age':[21,32,43,31]
}
df = pd.DataFrame(d)
df

1.2 NumPy二维数组创建

NumPy 二维数组创建时,只需要将二维数组赋值给 DataFrame 的 values,然后指定 index 行索引和 column 列索引即可。

df = pd.DataFrame(
    data=np.random.randint(10,100,size=(4,6)),
    index=['小明','小红','小黄','小绿'],
    columns=['语文','数学','英语','化学','物理','生物']
)
df

二、DataFrame切片

对于 DataFrame 的切片操作,因为是表格型,因此可以分为行切片,列切片,行列切片。

df = pd.DataFrame(
    data=np.random.randint(10,100,size=(4,6)),
    index=['小明','小红','小黄','小绿'],
    columns=['语文','数学','英语','化学','物理','生物']
)
print(df)

2.1 行切片

既然是切片,也是分为显式切片和隐式切片,下面分别演示。

显式切片:

df['小红':'小黄'] 
df.loc['小红':'小黄']

隐式切片:

df[1:3] # 数字是左闭右开
df.iloc[1:3]

2.2 列切片

对于列切片,即不管第一个维度(使用:,实现),需要特别注意的是,对列切片不能使用中括号 [] ,只能使用 lociloc

  • 显式切片
df.loc[:,'语文':'英语']


使用中括号报错:

  • 隐式切片
df.iloc[:,0:3]


使用中括号报错:

2.3 行列切片

行列切片同时涉及对行和对列的切片,因此,对行列切片也只有两种方式,loc & iloc

df.loc['小明':'小红','语文':'数学']

df.iloc[0:2,0:2]

三、DataFrame运算

3.1 DataFrame和标量的运算

DataFrame和标量之间的运算(±*/ // % **),正常对每个元素运算即可。

df1 = pd.DataFrame(
    data=np.random.randint(0,10,(2,3))
)
display(df1)
df1 + 10

3.2 DataFrame之间的运算

DataFrame的运算需要注意:

  • 1.DataFrame没有广播机制,因此它不会为缺失的行列补充数据
  • 2.如果索引对应,那么正常运算
  • 3.如果索引不对应,那么是 NaN
  • 4.如果想给没有索引的地方填充数据,使用 add 函数
df1 = pd.DataFrame(
    data=np.random.randint(0,10,(2,3))
)
df2 = pd.DataFrame(
    data=np.random.randint(0,10,(3,2))
)
display(df1,df2)
df1 + df2


使用 add 函数填充数据:

df1.add(df2,fill_value=0)

3.3 Series和DataFrame之间的运算

Series 的行索引会自动匹配 DataFrame 的列索引,匹配成功后,会对 DataFrame 的每一行都做相同的运算。

s = pd.Series([100,10,1],index=df1.columns)
df = pd.DataFrame(data=np.random.randint(2,10,(3,3)))
display(s,df)
df + s

四、DataFrame多层次索引

4.1 多层次索引构造

多层次索引创建包括隐式构造和显式构造,隐式构造是直接指定一个多维 index 和多维 column 的构造方式,显式构造是通过 MultiIndex 类来构造的,有三种方式,分别是 数组、元组、笛卡尔积

1.隐式构造

data = np.random.randint(0,100,size=(6,6))

index = pd.MultiIndex.from_arrays([
    ['一班','一班','一班','二班','二班','二班'],
    ['张三','李四','王五','赵六','孙七','王八']
])

columns = [
    ['期中','期中','期中','期末','期末','期末'],
    ['语文','数学','英语','语文','数学','英语']
]

df = pd.DataFrame(data=data,index=index,columns=columns)
df

2.显式构造

显式构造在隐式构造的基础上,只改变 index ,不改变其他。

  • <1> 数组
index = pd.MultiIndex.from_arrays([
    ['一班','一班','一班','二班','二班','二班'],
    ['张三','李四','王五','赵六','孙七','王八']
])
  • <2> 元组
index = pd.MultiIndex.from_tuples(
    (
        ('一班','张三'),('一班','李四'),('一班','王五'),
        ('二班','赵六'),('二班','孙七'),('二班','王八')
    )
)
  • <3> 笛卡尔积

笛卡尔积构造出来的是 2 x 3 = 6 个 index

index = pd.MultiIndex.from_product([
    ['一班','二班'],
    ['张三','李四','王五']
])

三种构造方法的运行结果和显式构造相同。

4.2 DataFrame多层索引的索引

1.获取元素

多层次索引中,如果使用 中括号 ,那么是列列行行;如果使用 loc ,那么是行列列行,如果使用 iloc ,那么是行列

还是使用上面构造的期中、期末成绩表格演示。

# 显式索引
print(df['期中']['语文']['一班']['张三'])
print(df.loc['一班']['期中']['语文']['张三'])
# 隐式索引
print(df.iloc[1])

2.列索引&行索引

只需要牢牢记住中括号 []lociloc 在多层索引中的使用规则即可。

df['期中']
df.loc['一班']['期中']
df.iloc[:,[1]]

4.3 DataFrame多层索引的切片操作

DataFrame 多层次索引切片较为复杂,可以参考这篇博客 【数据分析day03】pandas“层次化索引对象”的多层索引,切片,stack。

五、索引的堆叠

索引的堆叠是指将行变成列,或将列变成行的操作,列变行由 stack 函数实现,行变列由 unstack 函数实现。

stack:将列索引变成行索引,默认是将最里层的列索引变成行索引,可以通过level控制,level默认等于 -1 并且变成的行索引也是在最里层。

首先构造 dataframe 对象:

data = np.random.randint(0,100,size=(6,6))

index = pd.MultiIndex.from_arrays([
    ['一班','一班','一班','二班','二班','二班'],
    ['张三','李四','王五','赵六','孙七','王八']
])

columns = [
    ['期中','期中','期中','期末','期末','期末'],
    ['语文','数学','英语','语文','数学','英语']
]

df = pd.DataFrame(data=data,index=index,columns=columns)
df


然后使用 stack 函数将列索引变成行索引:

df.stack()


和下列写法等价:

df.stack(level=-1)

将最外层列索引变成行索引:

df.stack(level=0)

unstack:将行索引变成列索引(反堆叠),并且变成的列索引在最里层

还是使用上面的 dataframe 对象,进行反堆叠:

df.unstack()

level 属性:level默认等于 -1 ,最外层是0,最往里数值越大,-1就是指最里层

fill_value 属性:是stack、unstack方法的属性,用于填充NaN值。

不填充空值时:

df.unstack(level=0)


添加 fill_value 属性填充:

df.unstack(level=0,fill_value=0)

六、聚合操作

dataframe 聚合操作就是指 dataframe 聚合函数,有 sum、mean、max、min 等,主要有两个属性:aixs 控制行列,level 控制层级

axis 属性:控制行列,axis = 0 表示行,axis = 1 表示列。

level 属性:控制层级,从外到里,依次增大,-1 表示最里层。

构造 dataframe 对象:

data = np.random.randint(0,100,size=(6,6))

index = pd.MultiIndex.from_arrays([
    ['一班','一班','一班','二班','二班','二班'],
    ['张三','李四','王五','赵六','孙七','王八']
])

columns = [
    ['期中','期中','期中','期末','期末','期末'],
    ['语文','数学','英语','语文','数学','英语']
]

df = pd.DataFrame(data=data,index=index,columns=columns)
df


使用 sum 函数聚合:

df.sum()


和下列写法等价:

df.sum(axis=0)

保留第一层列,求行的和:

df.sum(axis=1,level=0)

结语

💕 本期跟大家分享的 “芝士” 就到此结束了,关于 DataFrame 数据结构,你学会了吗?✨

🍻 我是向阳花花花花,在学习的路上一直前行,期待与你一起进步。~ 🍻

🔥 如果文中有些地方不清楚的话,欢迎联系我,我会给大家提供思路及解答。🔥

相关导读

文章直达链接
上期回顾【数据分析 - 基础入门之pandas篇②】- pandas数据结构——Series

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/762828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AJAX异步请求JSON数据格式

目录 前言 1.AJAX的实现方式 1.1原生的js实现方式 1.2JQuery实现方式 2.1语法 3.JSON数据和Java对象的相互转换 3.1将JSON转换为Java对象 3.2将Java对象转换为JSON 前言 AJAX&#xff1a;ASynchronous JavaScript And XML 异步的JavaScript 和 XML。 Ajax 是一种在…

在安卓里用c++显示骨骼动画

1. 程序模块图 2. 编译第三方库Assimp 2.1 下载 官网下载5.0.0版本,https://codeload.github.com/assimp/assimp/zip/refs/tags/v5.0.0 2.2 生成安卓编译链 解压后在assimp-5.0.0下建文件夹BuildAssimp 放两个脚本make_standalone_toolchain.bat python D:/Android/Sdk/nd…

安达发|各部门实施APS系统前后有哪些变化?

众所周知&#xff0c;生产计划部门是制造企业的重要部门&#xff0c;承担销售、采购、仓储、质量检验和生产的各个部门的协调工作。APS 先进计划排程系统系统通过人工智能算法跟踪所有资源&#xff0c;包括材料、设备、人员、客户需求、订单变更等&#xff0c;自动快速计算出“…

odoo-031 odoo13和odoo16的网站上添加显示变体描述 Website Add Variant Description

文章目录 测试环境需求描述实现步骤实际效果思路说明 测试环境 Odoo 版本&#xff1a; odoo13 和 odoo16 Python 版本&#xff1a;3.6.9 操作系统&#xff1a;Ubuntu 18.04 需求描述 添加变体描述&#xff0c;显示在 form 视图&#xff1b;在网站上动态显示产品变体描述。 …

QT之智能指针

如果没有智能指针&#xff0c;程序员必须保证new对象能在正确的时机delete&#xff0c;四处编写异常捕获代码以释放资源&#xff0c;而智能指针则可以在退出作用域时(不管是正常流程离开或是因异常离开)总调用delete来析构在堆上动态分配的对象。 来看看一个野指针例子 程序将会…

在 3ds Max 中创建逼真的玻璃材质

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 尽管本教程基于 3ds Max&#xff0c;但相同的设置适用于许多其他 3D 产品。 注意&#xff1a;单击每个步骤中的缩略图可查看更大的屏幕截图&#xff0c;其中包括视口和用户界面的相关部分。 步骤 1由于本教…

Linux的权限管理精细总结

&#xff08;该图由AI绘制 关注我 学习AI画图&#xff09; 目录 一、权限概述 1、权限的基本概念 2、为什么要设置权限 3、Linux用户身份类别 4、user文件拥有者 5、group文件所属组内用户 6、other其他用户 7、特殊用户root 二、普通权限管理 1、ls -l命令查看文件…

LED显示屏的8个常见信号干扰因素及解决方法

LED显示屏在使用过程中可能会受到多种信号干扰因素的影响&#xff0c;导致显示效果不理想或出现问题。以下是LED显示屏常见的信号干扰因素以及对应的解决方法&#xff1a; 1&#xff0c;电源干扰&#xff1a; 干扰因素&#xff1a;电源波动、电源噪声等。 解决方法&#xff1a…

jenkins发布使用邮件添加审批

首先安装好Email Extension Plugin插件并在 system下配置好邮件 然后配置流水线需要的参数 ![在这里插入图片描述](https://img-blog.csdnimg.cn/418fc89bfa89429783a1eb37d3e4ee26.png#pic_center pipeline如下&#xff1a; def skipRemainingStages false //是否跳过生…

【原创】实现GPT中Transformer模型之框架概念

作者&#xff1a;黑夜路人 时间&#xff1a;2023年7月 GPT是什么意思 GPT的全称是 Generative Pre-trained Transformer&#xff08;生成型预训练变换模型&#xff09;&#xff0c;它是基于大量语料数据上训练&#xff0c;以生成类似于人类自然语言的文本。其名称中的“预训练”…

Knife4j-的使用(详细教程)

文章目录 前言一、简介二、版本参考三、基本使用1. 导入相关依赖2. 比对效果3. 增强特性应用 四、Spring-Cloud 整合1. 项目准备2. 实现步骤2.1 依赖引入2.2 编写配置类2.2.1基础信息配置2.2.2 配置接口信息2.2.3 安全认证配置 2.3 常用注解的使用2.3.1 Api2.3.2 ApiOperation2…

计算机组成2——存储系统

1. 硬件构成、工作原理、评价指标 2.主存储器 基本构成为DRAM&SRAMROM&#xff0c;工作原理为串行访问特点是采用多体交叉提高读取速度 RAM工作原理 SRAM的读写过程如下&#xff1a; WE控制读写&#xff1b; CS为片选信号&#xff1b; VCC为接地端&#xff1b; GND为…

GitLab 16.1创建新成员

GitLab 16.1界面有明显的变化,Admin Area在界面中不容易找到。 下面是找到Admin Area的方法。 本来是可以通过红框的链接找到Admin Area,但是这链接是http://127.0.0.1:8000/root,无法直接访问。 这里有两个方法进入。 方法1 将链接直接改成服务器ip,例如服务器ip是19…

【技术指南】3D转换工具HOOPS Exchange的功能特征和典型使用场景全解析(二)

什么是 HOOPS Exchange&#xff1f;HOOPS Exchange 是一组软件库&#xff0c;可以帮助开发人员在开发应用程序时读取和写入主流的 2D 和 3D 格式。HOOPS Exchange 支持 在主流的3D 文件格式中读取 CAD 数据&#xff0c;并支持将 3D 数据转换为 PRC 数据格式&#xff0c;这是一种…

Godot实用代码-存取存档的程序设计

1. Settings.gd 全局变量 用于保存玩家设置 对应Settings.json 2. Data.gd 全局变量 用于保存玩具数据 对应Data.json 实践逻辑指南 1.在游戏开始的时候&#xff08;游戏场景入口的_ready()处&#xff0c; Settings.gd

ceph对象存储和安装dashborad

一、ceph–RadosGW对象存储 数据不需要放置在目录层次结构中&#xff0c;而是存在于平面地址空间内的同一级别&#xff1b; 应用通过唯一地址来识别每个单独的数据对象; 每个对象可包含有助于检索的元数据&#xff1b; 在Ceph中的对象存储网关中&#xff0c;通过RESTful API在…

医院制剂研发与真实世界评价论坛圆满闭幕

医院制剂是新药的摇篮和宝库&#xff0c;现代科技为医院制剂的研发和转化赋能。在新时代新政策下&#xff0c;2023年07月16日&#xff0c;由湖南省药学会医院制剂研发与真实世界评价专业委员会&#xff08;下称“专委会”&#xff09;主委单位湖南易能生物医药有限公司&#xf…

划片机的技术分解

划片机是一种切割设备&#xff0c;主要用于将硬脆材料&#xff08;如硅晶圆、蓝宝石基片、LED基片等&#xff09;分割成较小的单元。其工作原理是以强力磨削为划切机理&#xff0c;通过空气静压电主轴带动刀片与工件接触点的划切线方向呈直线运动&#xff0c;将每一个具有独立电…

Java 设计模式——观察者模式

目录 1.概述2.结构3.案例实现3.1.抽象观察者3.2.观察对象3.3.具体观察者3.4.具体观察对象3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——Observable / Observer6.1.Observable 类6.2.Observer 接口6.3.案例 1.概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#…

如何管理数据库用户

目录 一、数据库用户管理 新建用户 查询数据库中的用户 重命名用户名 删除用户 修改当前用户密码 修改其他用户密码 二、数据库用户授权 授权 允许用户在指定终端远程连接MySQL并拥有指定权限 撤销权限 授权用户权限总结 一、数据库用户管理 新建用户 命令&#x…