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

文章目录

  • 前言
  • 一、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://xiahunao.cn/news/2813312.html

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

相关文章

解决“设备未经过play保护认证”问题

第一步&#xff1a;获取GSF id 可以通过apkPure安装device id&#xff0c;复制GSF id&#xff0c;如下图 第二步&#xff1a;注册 打开网址&#xff1a;&#xff08;https://www.google.com/android/uncertified/?pli1 &#xff09;等待注册&#xff0c;很快就能完成, 第三步…

js 实战小案例

实战 时间 js 格式化时间 <script type"text/javascript">function formatDate(date) { let year date.getFullYear(); let month String(date.getMonth() 1).padStart(2, 0); // getMonth() 返回的月份是从0开始的&#xff0c;所以要加1&#xff0c;并…

如何快速起盘 七人拼团模式帮您解决 企业家可以过来看看!

七人团购模式&#xff0c;又称即拼模式&#xff0c;是一种创新的商业模式&#xff0c;通过结合拼团与二二复制的玩法&#xff0c;实现了快速的裂变和引流。该模式不仅具有完善的奖励激励制度&#xff0c;能够激发会员的推广积极性&#xff0c;还能显著提高平台产品的销量&#…

JavaWeb个人学习01

1:RequestParam(defaultValue "默认的值") 这个可以在一个参数的前面写上 要是前端不传值进来的话 这个形参就是你定义的默认值 2: slf4j 对应的是日志的输出 log.info("参数是 {}", detail); 3: 分页插件 PageHelper 用法: 准备工作: 引入依赖 …

mybatis 集成neo4j功能实现

文章目录 前言一、引入jar包依赖二、配置 application.properties三、Mybatis Neo4j分页插件四、Mybatis Neo4j自定义转换器handler五、MybatisNeo4j代码示例总结 前言 MyBatis是一个基于Java语言的持久层框架&#xff0c;它通过XML描述符或注解将对象与存储过程或SQL语句进行…

微信自动回复消息如何设置?演示如下

自动回复 当下&#xff0c;微信已经成为在工作中必不可少的沟通工具。但微信并没有自动回复的功能&#xff0c;一旦咨询量非常大&#xff0c;往往会出现回复不及时的情况。这样不仅会影响客户满意度&#xff0c;降低客户转化率&#xff0c;甚至会导致客户流失。 那如何实现自动…

Springboot教程(二)——过滤器、拦截器

过滤器 过滤器可以在调用控制器方法之前进行一些操作&#xff0c;过滤器类一般放在filter包下。 配置类注册 使用过滤器时&#xff0c;要实现Filter接口&#xff0c;并重写doFilter方法&#xff1a; class TestFilter : Filter {override fun doFilter(request: ServletReq…

怎么消除照片上的路人?分享几个无痕消除工具

穿梭于繁忙的街头&#xff0c;我们总会在不经意间捕捉到那些精彩的瞬间&#xff0c;但往往也会因为一些无关的路人破坏了整个画面的和谐。在摄影后期处理中&#xff0c;消除照片中的路人是一项常见的需求。现在&#xff0c;让我们一起探索如何巧妙地消除照片中的路人&#xff0…

Elasticsearch使用function_score查询酒店和排序

需求 基于用户地理位置&#xff0c;对酒店做简单的排序&#xff0c;非个性化的推荐。酒店评分包含以下&#xff1a; 酒店类型&#xff08;依赖用户历史订单数据&#xff09;&#xff1a;希望匹配出更加符合用户使用的酒店类型酒店评分&#xff1a;评分高的酒店用户体验感好ge…

2024河北国际光伏展

2024河北国际光伏展是一个专门展示和促进光伏技术与产业发展的国际性展览会。该展览会将于2024年在中国河北省举办&#xff0c;吸引来自世界各地的光伏企业、专家、学者和投资者参加。 展览会将展示最新的光伏技术和产品&#xff0c;包括太阳能电池板、光伏组件、逆变器、储能系…

洛谷 P2678 [NOIP2015 提高组] 跳石头(二分答案)

前提知识&#xff1a; 二分法往下其实有一些小分支&#xff0c;最常见的是二分查找&#xff0c;然后就是二分答案&#xff0c;浮点数二分等等 主要谈谈二分查找和二分答案的具体区别&#xff0c;我们不能光报个菜名随口就来&#xff0c;一问具体也说不出来个所以然。 前提&a…

GB28181 —— Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台(连接带云台摄像机)

最终效果 简介 GB28181协议是视频监控领域的国家标准。该标准规定了公共安全视频监控联网系统的互联结构, 传输、交换、控制的基本要求和安全性要求, 以及控制、传输流程和协议接口等技术要求,是视频监控领域的国家标准。GB28181协议信令层面使用的是SIP(Session Initiatio…

物联网手持终端机 超高频RFID手持终端工业级盘点PDA设备

在数字化时代&#xff0c;物联网手持终端机已经成为各行业不可或缺的工具。联强优创自主研发远距离手柄式超高频RFID读写手持终端&#xff0c;搭载高性能UHF读写模块&#xff0c;距离可达1-15米&#xff0c;基于IMPINJ E710芯片超高频模块与设备完美兼容&#xff0c;支持协议标…

图论基础(一)

一、图论 图论是数学的一个分支&#xff0c;它以图为研究对象。图论中的图是若干给定的点&#xff08;顶点&#xff09;以及连接两点的线&#xff08;边&#xff09;构成的图像&#xff0c;这种图形通常用来描述某些事物之间的某种特定关系&#xff0c;用点代表事物&#xff0c…

3.机器学习-十大算法之一线性回归算法(LinearRegression)原理讲解

3️⃣.机器学习-十大算法之一线性回归算法&#xff08;LinearRegression&#xff09;原理讲解 个人简介理解算法线性回归的一般模型 什么是线性&#xff1f;什么是非线性&#xff1f;什么是回归分析&#xff1f;损失函数算法优缺点优点缺点&#xff1a; 示例数学公式误差概率密…

Linux 内存管理概述(偏实战,略理论,附链接)

基础理论 1. 内存映射 可以参考&#xff1a; Linux内存映射 - 知乎 写的很详细&#xff0c;而且也有代码分析 2. 虚拟内存的空间分布 通过这张图你可以看到&#xff0c;用户空间内存&#xff0c;从低到高分别是五种不同的内存段。只读段&#xff0c;包括代码和常量等。数据段…

试用北大库博Cobot-SCA工具

最近试用北大软件工具的库博-SCA工具&#xff0c;其产品全称是库博软件成分分析与同源漏洞检测工具软件。这个产品名称有点长&#xff0c;至于原因&#xff0c;可能是为了与市场上其它SCA工具进行区分吧。北大库博SCA不是像大多数SCA工具&#xff0c;解析构建文件中的依赖组件进…

亿道丨三防平板丨手持平板丨加固平板丨助力地震救援

自土耳其发生7.8级大地震以来&#xff0c;一直都牵动着世人的心。2023年2月10日&#xff0c;据法新社最新消息&#xff0c;强震已造成土耳其和叙利亚两国超2万人遇难。报道称&#xff0c;相关官员和医护人员表示&#xff0c;地震造成土耳其17674人死亡&#xff0c;叙利亚则有33…

Linux--查看网络性能指标

一、性能指标有哪些&#xff1f; 带宽&#xff0c;表示链路的最大传输速率&#xff0c;单位是 b/s &#xff08;比特 / 秒&#xff09;&#xff0c;带宽越大&#xff0c;其传输能力就越强。延时&#xff0c;表示请求数据包发送后&#xff0c;收到对端响应&#xff0c;所需要的…

跟着cherno手搓游戏引擎【25】封装2DRenderer,封装shader传参,自定义Texture

封装2DRenderer&#xff1a; Renderer.h: #include"ytpch.h" #include"Renderer.h" #include <Platform/OpenGL/OpenGLShader.h> #include"Renderer2D.h" namespace YOTO {Renderer::SceneData* Renderer::m_SceneData new Renderer::S…