【100天精通Python】Day59:Python 数据分析_Pandas高级功能-多层索引创建访问切片和重塑操作,pandas自定义函数和映射功能

目录

1 多层索引(MultiIndex)

1.1 创建多层索引

1.1.1 从元组创建多层索引

1.1.2 使用 set_index() 方法创建多层索引

1.2 访问多层索引数据

1.3 多层索引的层次切片

1.4 多层索引的重塑

2 自定义函数和映射

2.1 使用 apply() 方法进行自定义函数操作

2.2 使用 map() 方法进行映射操作

2.3 使用 applymap() 进行元素级的自定义函数操作

3 Pandas性能优化常用技巧和操作


1 多层索引(MultiIndex)

        Pandas 的多层索引(MultiIndex)允许你在一个DataFrame的行或列上拥有多个层次化的索引,这使得你能够处理更复杂的数据结构,例如多维时间序列数据或具有层次结构的数据。以下是多层索引的详细说明和示例:

1.1 创建多层索引

        你可以使用多种方式来创建多层索引,包括从元组、列表或数组创建,或者通过设置 set_index() 方法。以下是一些示例:

1.1.1 从元组创建多层索引

import pandas as pd# 从元组创建多层索引
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)], names=['Label1', 'Label2'])# 创建带多层索引的DataFrame
data = {'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data, index=index)
print(df)

1.1.2 使用 set_index() 方法创建多层索引

import pandas as pd# 创建一个普通的DataFrame
data = {'Label1': ['A', 'A', 'B', 'B'],'Label2': [1, 2, 1, 2],'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data)# 使用set_index()方法将列转换为多层索引
df.set_index(['Label1', 'Label2'], inplace=True)
print(df)

1.2 访问多层索引数据

你可以使用 .loc[] 方法来访问多层索引中的数据。通过提供多个索引级别的标签,你可以精确地选择所需的数据。以下是一些示例:

# 访问指定多层索引的数据
print(df.loc['A'])  # 访问Label1为'A'的所有数据
print(df.loc['A', 1])  # 访问Label1为'A'且Label2为1的数据

1.3 多层索引的层次切片

你可以使用切片操作来选择多层索引的一部分数据。如下:

# 切片操作:选择Label1为'A'到'B'的数据
print(df.loc['A':'B'])# 切片操作:选择Label1为'A'且Label2为1到2的数据
print(df.loc['A', 1:2])

1.4 多层索引的重塑

你可以使用 .stack().unstack() 方法来重塑具有多层索引的数据。.stack() 可以将列标签转换为索引级别,而 .unstack() 可以将索引级别转换为列标签。如下:

# 使用stack()方法将列标签转换为索引级别
stacked_df = df.stack()# 使用unstack()方法将索引级别转换为列标签
unstacked_df = stacked_df.unstack()

这些是关于Pandas多层索引的基本说明和示例。多层索引是处理复杂数据的重要工具,使你能够更灵活地组织和访问数据。你可以根据数据的特点和需求来选择使用多层索引的方式。

2 自定义函数和映射

        在 Pandas 中,你可以使用自定义函数和映射来对数据进行转换和处理。这些方法非常有用,因为它们允许你根据自己的需求自定义数据操作。以下是有关如何在 Pandas 中使用自定义函数和映射的详细说明和示例:

2.1 使用 apply() 方法进行自定义函数操作

  apply() 方法可以用于在DataFrame的行或列上应用自定义函数。你可以将一个函数应用到一列,也可以将其应用到整个DataFrame。以下是示例:

import pandas as pd# 创建一个示例DataFrame
data = {'A': [1, 2, 3, 4],'B': [10, 20, 30, 40]}
df = pd.DataFrame(data)# 自定义函数,将A列的值加倍
def double(x):return x * 2# 使用apply()将自定义函数应用到A列
df['A_doubled'] = df['A'].apply(double)print(df)

输出: 

 

2.2 使用 map() 方法进行映射操作

  map() 方法可以用于将一个Series的值映射为另一个Series的值,通常用于对某一列进行值替换或映射。以下是示例:

import pandas as pd# 创建一个示例DataFrame
data = {'A': ['foo', 'bar', 'baz'],'B': [1, 2, 3]}
df = pd.DataFrame(data)# 创建一个字典来映射A列的值
mapping = {'foo': 'apple', 'bar': 'banana', 'baz': 'cherry'}# 使用map()将A列的值映射为新的值
df['A_mapped'] = df['A'].map(mapping)print(df)

输出: 

2.3 使用 applymap() 进行元素级的自定义函数操作

    applymap() 方法用于对DataFrame的每个元素应用自定义函数。这是一种适用于整个DataFrame的元素级别的操作。以下是示例:

import pandas as pd# 创建一个示例DataFrame
data = {'A': [1, 2, 3],'B': [4, 5, 6]}
df = pd.DataFrame(data)# 自定义函数,将每个元素乘以2
def double(x):return x * 2# 使用applymap()将自定义函数应用到整个DataFrame
df_doubled = df.applymap(double)print(df_doubled)

输出: 

        这些是在 Pandas 中使用自定义函数和映射的基本示例。通过使用这些方法,你可以自定义数据操作,使其满足你的需求。无论是进行数据清理、数值计算还是进行值映射,自定义函数和映射都是非常有用的工具。

3 Pandas性能优化常用技巧和操作

         Pandas 性能优化是一个重要的主题,特别是当你处理大规模数据集时。以下是一些用于提高 Pandas 性能的一般性建议和技巧:

  1. 选择合适的数据结构: 在 Pandas 中,有两种主要的数据结构,DataFrame 和 Series。确保选择最适合你数据的结构。例如,如果你只需要处理一维数据,使用 Series 比 DataFrame 更高效。

  2. 避免使用循环: 尽量避免使用显式的循环来处理数据,因为它们通常比 Pandas 内置的向量化操作慢。使用 Pandas 内置的函数和方法,如 apply()map()groupby() 来替代循环操作。

  3. 使用 atiat 访问元素: 如果只需要访问单个元素而不是整个行或列,请使用 .at[].iat[] 方法,它们比 .loc[].iloc[] 更快。

  4. 使用 .loc[].iloc[] 进行切片: 使用 .loc[].iloc[] 可以实现更快的切片和索引,避免复制数据。使用 .loc[].iloc[] 进行索引: 使用 .loc[].iloc[] 索引器来访问数据,这比直接使用中括号 [] 更高效,特别是当你需要选择多行或多列时。

  5. 适当设置内存选项: 通过设置 Pandas 的内存选项,如 pd.set_option('max_rows', None)pd.set_option('max_columns', None),可以控制显示的最大行数和列数。这有助于防止在大型数据集上显示大量数据。

  6. 合并和连接优化: 使用合适的合并和连接方法,如 pd.merge()pd.concat(),并使用 onhowsuffixes 等参数来优化操作。

  7. 使用合适的数据类型:尽量使用 astype() 方法来显式指定数据类型,而不是让 Pandas 自动推断。这可以减少内存使用并提高性能。 Pandas 会自动为每一列选择数据类型,但你可以显式指定数据类型来减少内存使用并提高性能。使用pd.to_numeric()pd.to_datetime() 等方法将列转换为正确的数据类型。

  8. 使用 HDF5 存储: 对于大型数据集,考虑将数据存储在 HDF5 格式中,以便快速读取和写入数据。

  9. 适时使用 inplace 参数: 在 Pandas 中,许多方法默认不会修改原始数据,而是返回一个新的对象。如果你确定要在原始数据上进行操作而不需要创建新对象,可以使用 inplace=True 参数来节省内存和提高性能。

  10. 并行处理: 对于大数据集,考虑使用并行计算来加速数据处理。Pandas 提供了 multiprocessing 库来实现并行处理。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion — ControlNet 超详细讲解

Stable Diffusion — ControlNet 超详细讲解 ControlNet 最近非常火🔥!ControlNet 和 Stable Diffusion 的结合使 Stable Diffusion 能够接受指导图像生成过程的条件输入,从而增强了 Stable Diffusion 的性能。今天为大家深入剖析 ControlNe…

Axure RP仿QQ音乐app高保真原型图交互模板源文件

Axure RP仿QQ音乐app高保真原型图交互模板源文件。本套素材模板的机型选择华为的mate30,在尺寸和风格方面,采用标准化制作方案,这样做出来的原型图模板显示效果非常优秀。 原型中使用大量的动态面板、中继器、母版,涵盖Axure中技…

SpringMVC中的综合案例

目录 一.常用注解 实例: 二.参数转递 2.1. 基础类型 2.2. 复杂类型 2.3. RequestParam 2.4.PathVariable 2.5.RequestBody 2.6.RequestHeader 2.7. 请求方法 三.返回值 3.1.void 3.2.String 3.3 StringModel 3.4 ModelAndView 四、页面跳转 4.1.转发 4.…

Python爬虫 教程:IP池的使用

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、简介 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率…

Redis(详细)

目录 Redis是什么 Redis的主要特点 Redis的使用场景 会话存储 缓存存储 实现分布式锁 Redis为什么这么快 基于内存操作 高效的数据结构 多路I/O复用模型 单线程执行 Redis常见的数据结构 Redis有序列表的实现 跳跃表的执行流程 Redis分布式锁实现 使用分布式锁…

【iOS】MVC

文章目录 前言一、MVC各层职责1.1、controller层1.2、model层1.3、view层 二、总结三、优缺点3.1、优点3.2、缺点 四、代码示例 前言 MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此…

win10自带wifi共享功能

1、按下【wini】组合键打开windows设置,点击【网络和internet】; 2、按照下图,打开个移动热点,设置名称、密码。

【C++】详解std::thread

2023年9月10日,周日下午开始 2023年9月10日,周日晚上23:35完成 虽然这篇博客我今天花了很多时间去写,但是我对std::thread有了一个完整的认识 不过有些内容还没完善,以后有空再更新.... 目录 头文件类的成员类型方法(construc…

LVS DR模式负载均衡群集部署

目录 1 LVS-DR 模式的特点 1.1 数据包流向分析 1.2 DR 模式的特点 2 DR模式 LVS负载均衡群集部署 2.1 配置负载调度器 2.1.1 配置虚拟 IP 地址 2.1.2 调整 proc 响应参数 2.1.3 配置负载分配策略 2.2 部署共享存储 2.3 配置节点服务器 2.3.1 配置虚拟 IP 地址 2.3.2…

iOS IdiotAVplayer实现视频分片缓存

文章目录 IdiotAVplayer 实现视频切片缓存一 iOS视频边下边播原理一 分片下载的实现1 分片下载的思路2 IdiotAVplayer 实现架构 三 IdiotAVplayer 代码解析IdiotPlayerIdiotResourceLoaderIdiotDownLoader IdiotAVplayer 实现视频切片缓存 一 iOS视频边下边播原理 初始化AVUR…

自动化运维——ansible (五十二) (01)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、概述 1.1 为什么要用自动化运维软件 1.2 自动化运维 1.3 自动化运维要注意的方面 1.4 自动化运维主要关注的方面 1.5 常见的开源自动化运维软件 1.6 自动化运维软件…

K8S:kubectl陈述式及声明式资源管理

文章目录 一.陈述式资源管理方法1.陈述式资源管理概念2.基本信息查看(1)查看版本信息(2)查看资源对象简写(3)查看集群信息(4)配置kubectl自动补全(5)node节点…

外传-Midjourney的局部重绘功能

今天在抄袭。。。啊不,借鉴 midjourney 官网教程的时候,发现多了一个 局部重绘的功能,意外发觉还不错,分享一下用法。 先给大家说一下,我这段时间都在学习 SD,局部重绘是基操,而 MJ 一直是次次…

为什么要使用设计模式,以及使用设计模式的好处

在软件开发中,衡量软件质量只要包含如下指标: 正确性可维护性可读性可扩展性简洁性可测试性健壮性灵活性可复用性 然而,对于一些刚入行的新程序员来说,往往会注意不到上面这些问题,从而产生了一些让人头皮发麻的烂代…

【动态规划刷题 13】最长递增子序列 摆动序列

300. 最长递增子序列 链接: 300. 最长递增子序列 1.状态表示* dp[i] 表⽰:以 i 位置元素为结尾的「所有⼦序列」中,最⻓递增⼦序列的⻓度。 2.状态转移方程 对于 dp[i] ,我们可以根据「⼦序列的构成⽅式」,进⾏分类讨论&#…

生成树协议 STP(spanning-tree protocol)

一、STP作用 1、消除环路:通过阻断冗余链路来消除网络中可能存在的环路。 2、链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。 二、STP选举机制 1、目的:找到阻塞的端口 2、STP交换机的角色&am…

MAC M1芯片安装mounty读写移动硬盘中的文件

因为移动硬盘中的文件是微软公司NTFS格式,MAC只支持自己的APFS或者HFS,与微软的NTFS不兼容,所以需要第三方的软件来支持读写硬盘中的文件,经过一上午的折腾,最终选择安装mounty这个免费的第三方软件 工具网址连接&am…

YOLO目标检测——棉花病虫害数据集+已标注txt格式标签下载分享

实际项目应用:目标检测棉花病虫害数据集的应用场景涵盖了棉花病虫害的识别与监测、研究与防治策略制定、农业智能决策支持以及农业教育和培训等领域。这些应用场景可以帮助农业从业者更好地管理棉花病虫害,提高棉花产量和质量,推动农业的可持…

线性代数的本质(二)

文章目录 线性变换与矩阵线性变换与二阶方阵常见的线性变换复合变换与矩阵乘法矩阵的定义列空间与基矩阵的秩逆变换与逆矩阵 线性变换与矩阵 线性变换与二阶方阵 本节从二维平面出发学习线性代数。通常选用平面坐标系 O x y Oxy Oxy ,基向量为 i , j \mathbf i,…

指针进阶(一)

指针进阶 1. 字符指针面试题 2. 指针数组3. 数组指针3.1 数组指针的定义3.2 &数组名VS数组名 3.3 数组指针的使用4. 数组传参和指针传参4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 前言 指针的主题,我们在初级阶段的《指针》章节已经接…