【玩转pandas系列】pandas数据结构—DataFrame

news2025/1/22 3:35:52

文章目录

  • 前言
  • 一、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/1474871.html

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

相关文章

安全防御-第六次

内容安全 攻击可能只是一个点&#xff0c;防御需要全方面进行 DFI和DPI技术--- 深度检测技术 DPI --- 深度包检测技术--- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对数据包的内容进行识别。&#xff08;应用层&…

音频混音算法的实现

最近项目有用到混音算法&#xff0c;这里用比较常见的一种&#xff0c;就是简单的加和之后做一下归一化。 是参考这个博主实现的&#xff1a; 音频混音的算法实现 下面直接贴代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <math.h&…

Mac 配置Clion Qt 调试显示变量值

背景 使用Clion开发Qt程序&#xff0c;在进行调试时&#xff0c;会看不到Qt类的变量值&#xff0c;只有指针形式&#xff0c;对于调试很不方便。 环境&#xff1a; Macbook ProCPU&#xff1a;M3Qt 5.15.13CLion 2023.3.4 解决方案 为了让Clion能显示Qt类的值&#xff0c;…

新加坡服务器托管:开启全球化发展之门

新加坡作为一个小国家&#xff0c;却在全球范围内享有极高的声誉。新加坡作为亚洲的科技中心&#xff0c;拥有先进的通信基础设施和成熟的机房托管市场。除了其独特的地理位置和发达的经济体系外&#xff0c;新加坡还以其开放的商业环境和便利的托管服务吸引着越来越多的国际公…

react 路由的基本原理及实现

1. react 路由原理 不同路径渲染不同的组件 有两种实现方式 ● HasRouter 利用hash实现路由切换 ● BrowserRouter 实现h5 API实现路由切换 1. 1 HasRouter 利用hash 实现路由切换 1.2 BrowserRouter 利用h5 Api实现路由的切换 1.2.1 history HTML5规范给我们提供了一个…

【Go 快速入门】协程 | 通道 | select 多路复用 | sync 包

文章目录 前言协程goroutine 调度使用 goroutine 通道无缓冲通道有缓冲通道单向通道 select 多路复用syncsync.WaitGroupsync.Mutexsync.RWMutexsync.Oncesync.Map 项目代码地址&#xff1a;05-GoroutineChannelSync 前言 Go 1.22 版本于不久前推出&#xff0c;更新的新特性可…

机器视觉运动控制一体机在光伏汇流焊机器人系统的解决方案

一、市场应用背景 汇流焊是光伏太阳能电池板中段加工工艺&#xff0c;其前道工序为串焊&#xff0c;在此环节流程中&#xff0c;需要在多个太阳能电池片表面以平行方式串焊多条焊带&#xff0c;形成电池串。串焊好的多组电池串被有序排列输送到汇流焊接工作台&#xff0c;通过…

MWC 2024丨美格智能推出5G RedCap系列FWA解决方案,开启5G轻量化新天地

2月27日&#xff0c;在MWC 2024世界移动通信大会上&#xff0c;美格智能正式推出5G RedCap系列FWA解决方案。此系列解决方案具有低功耗、低成本等优势&#xff0c;可以显著降低5G应用复杂度&#xff0c;快速实现5G网络接入&#xff0c;提升FWA部署的经济效益。 RedCap技术带来了…

Data Leakage and Evaluation Issues inMicro-Expression Analysis 阅读笔记

IEEE Transactions on Affective Computing上的一篇文章&#xff0c;做微表情识别&#xff0c;阅读完做个笔记。本文讨论了Data Leakage对模型准确度评估的影响&#xff0c;及如何融合多个微表情数据集&#xff0c;从而提升模型的准确度。工作量非常饱满&#xff0c;很认真&…

git忽略某些文件(夹)更改方法

概述 在项目中&#xff0c;常有需要忽略的文件、文件夹提交到代码仓库中&#xff0c;在此做个笔录。 一、在项目根目录内新建文本文件&#xff0c;并重命名为.gitignore&#xff0c;该文件语法如下 # 以#开始的行&#xff0c;被视为注释. # 忽略掉所有文件名是 a.txt的文件.…

基于SSM的校园订餐系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的校园订餐系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

5G-A,未来已来

目前&#xff0c;全国首个5G-A规模组网示范完成。这项由北京联通携手华为共同打造的示范项目&#xff0c;实现了北京市中心金融街、历史建筑长话大楼、大型综合性体育场北京工人体育场三个重点场景的连片覆盖。 实际路测结果显示&#xff0c;5G-A用户下行峰值速率达到10Gbps&am…

ky10-server docker 离线安装包、离线安装

离线安装脚本 # ---------------离线安装docker------------------- rpm -Uvh --force --nodeps *.rpm# 修改docker拉取源为国内 rm -rf /etc/docker mkdir -p /etc/docker touch /etc/docker/daemon.json cat >/etc/docker/daemon.json<<EOF{"registry-mirro…

弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙

作者&#xff1a;潘伟龙&#xff08;豁朗&#xff09; 背景 日志服务 SLS 是云原生观测与分析平台&#xff0c;为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务&#xff0c;基于日志服务的便捷的数据接入能力&#xff0c;可以将系统日志、业务日志等接入 …

【LeetCode刷题】146. LRU 缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -…

MYSQL学习笔记:索引

MYSQL学习笔记&#xff1a;索引 文章目录 MYSQL学习笔记&#xff1a;索引索引的分类索引的创建删除索引优化B树索引B树InnoDB主键和二级索引树聚集索引与非聚集索引哈希索引INNODB的自适应哈希索引索引和慢查询 用索引也是要涉及磁盘I/O的操作的索引也是一种数据结构&#xff0…

【计算机网络】数据链路层|封装成帧|透明传输|差错检测|PPP协议|CSMA/CD协议

目录 一、思维导图 ​ 二、数据链路层功能概述 1.数据链路层概述 2.数据链路层功能概述——封装成帧 3.数据链路层功能概述——透明传输 4.数据链路层功能概述——差错检测 三、数据链路层重要协议 1.数据链路层重要协议&#xff1a;PPP协议 2.数据链路层重要协议&#x…

LeetCode 刷题 [C++] 第141题.环形链表

题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

2024数字中国创新大赛·数据要素赛道“能源大数据应用赛”正式上线!参赛指南请查收

近日&#xff0c;由国网福建电力承办的2024数字中国创新大赛能源大数据应用赛正式上线发布。赛事按照数字中国建设、能源革命的战略要求&#xff0c;围绕能源数据要素x、能源数字技术、能源商业模式等热点设置赛题&#xff0c;诚邀社会各界为加快建成新型电力系统出谋划策&…

DVWA 靶场之 Command Injection(命令执行)middlehigh

对于 middle 难度的 我们直接先看源码 <?phpif( isset( $_POST[ Submit ] ) ) {// Get input$target $_REQUEST[ ip ];// Set blacklist$substitutions array(&& > ,; > ,);// Remove any of the characters in the array (blacklist).$target str_rep…