【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.mzph.cn/news/74713.shtml

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

相关文章

mysql之DML的select分组排序

目录 一、创建表employee和department表 1.创建department表 2.创建employee表 3.给employee表格和department表格建立外键 4.给department插入数据 5.给employee表插入数据 6.删除名字为那个的数据 二、分组查询和排序查询,以及对数据的处理(av…

悲观锁和乐观锁、缓存

悲观锁: 悲观锁的实现通常依赖于数据库提供的机制,在整个处理的过程中数据处于锁定状态,session的load方法有一个重载方法,该重载方法的第三个参数可以设置锁模式,load(object.class , int id,LockMode.?)&#xff0…

OpenCV实现图像的混合

原理 这其实也是加法,但是不同的是两幅图像的权重不同,这就会给人一种混合或者透明的感觉。 图像混合的计算公式如下: g(x)(1-a)f0(x) af1(x) 通过修改α的值(0→1) ,可以实现非常炫酷的混合。 现在我们把两幅图混合在一起。 第一幅图…

第6篇 vue的打包工具webpack

一 webpack 1.1 webpack的作用 webpack是一个打包工具,可以把多个静态资源文件打包成一个文件。如图所示: 1.2 版本依赖对照关系 PS E:\vue-project\vue-demo0902\wp-demo> npm -v 6.4.1 PS E:\vue-project\vue-demo0902\wp-demo> node -v v10.…

Redis使用原生命令搭建集群

1.Redis版本及下载 找到安装的redis版本,redis3.0以上版本才支持集群 下载对应的版本 2.安装redis集群 解压上传编译 [hadoophost152 opensource]$ tar -xvf redis-3.2.11.tar.gz [hadoophost152 opensource]$ cd redis-3.2.11/ [hadoophost152 redis-3.2.11]$ ma…

从零开始的PICO教程(4)--- UI界面绘制与响应事件

从零开始的PICO教程(4)— UI界面绘制与响应事件 文章目录 从零开始的PICO教程(4)--- UI界面绘制与响应事件一、前言1、大纲2、教程示例 二、具体步骤1、PICO VR环境配置2、XR的UI Canvas画布创建与调整(1)C…

用滑动条做调色板---cv2.getTrackbarPos(),cv2.creatTrackbar()

滑动轨迹栏作调色板 cv.createTrackbar(‘R’, ‘image’, 0, 255, nothing) 参数:哪个滑动轨迹栏,哪个窗口,最小值,最大值,回调函数 cv.getTrackbarPos(‘R’, ‘image’) 参数:轨迹栏名,窗口…

【Matlab】Matlab实现数据的动态显示方法

Matlab实现数据的动态显示方法 主要为大家详细介绍了Matlab使用Plot函数实现数据动态显示方法,具有一定的参考价值,感兴趣的小伙伴们可 以参考一下 对于真实系统或者仿真平台,数据是增量式的产生的。Matlab除了强大的矩阵运算外,还…

CSS 斜条纹进度条

效果&#xff1a; 代码&#xff1a; html: <div class"active-line flex"><!-- lineWidth&#xff1a;灰色背景 --><div class"bg-line"><div v-for"n in 30" class"gray"></div></div><div…

win10环境安装使用docker-maxwell

目的&#xff1a;maxwell可以监控mysql数据变化&#xff0c;并同步到kafka、mq或tcp等。 maxwell和canal区别&#xff1a; maxwell更轻量&#xff0c;canal把表结构也输出了 docker bootstrap可导出历史数据&#xff0c;canal不能 环境 &#xff1a;win10&#xff0c;mysql5…

PYTHON(一)——认识python、基础知识

一、为什么要学习python&#xff1f; Python 被认为是人工智能、机器学习的首选语言&#xff0c;可以说是全世界最流行通用范围最广的语言&#xff0c;几乎可以完成所有的任务&#xff0c;像设计游戏、建网站、造机器人甚至人工智能等都广泛使用Python。 二、输出&#xff08;…

机器学习——K最近邻算法(KNN)

机器学习——K最近邻算法&#xff08;KNN&#xff09; 文章目录 前言一、原理二、距离度量方法2.1. 欧氏距离2.2. 曼哈顿距离2.3. 闵可夫斯基距离2.4. 余弦相似度2.5. 切比雪夫距离2.6. 马哈拉诺比斯距离2.7. 汉明距离 三、在MD编辑器中输入数学公式&#xff08;额外&#xff0…

门面设计模式

github&#xff1a;GitHub - QiuliangLee/pattern: 设计模式 1 什么是门面设计模式 门面设计模式是一种软件设计模式&#xff0c;也被称为外观&#xff08;Facade&#xff09;模式。它提供了一个简单的接口&#xff0c;让客户端能够访问复杂系统中的一组接口。通过门面模式&a…

企业架构LNMP学习笔记15

客户端缓存&#xff1a; B/S架构里&#xff0c;Browser是浏览器&#xff0c;就是客户端。 客户端缓存告知浏览器获取服务段的信息是在某个区间时间段是有效的。 每次请求从服务器拿一遍数据&#xff0c;数据没有变化&#xff0c;影响带宽&#xff0c;影响时间。刷新又要去加载…

Java中快速排序的优化技巧:随机取样、三数取中和插入排序

目录 快速排序基础 优化1&#xff1a;随机取样 优化2&#xff1a;三数取中 优化3&#xff1a;插入排序 总结&#xff1a; 快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;它的平均时间复杂度为O(n log n)。然而&#xff0c;在某些情况下&…

Python实现猎人猎物优化算法(HPO)优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

spring boot-Resolved element must not contain multiple elements 警告

首先强调一下&#xff0c;此问题不影响程序运行。 报错信息&#xff1a; package org.springframework.util; ...public abstract class Assert ...public static void state(boolean expression, String message) {if (!expression) {throw new IllegalStateException(messa…

人工智能TensorFlow PyTorch物体分类和目标检测合集【持续更新】

1. 基于TensorFlow2.3.0的花卉识别 基于TensorFlow2.3.0的花卉识别Android APP设计_基于安卓的花卉识别_lilihewo的博客-CSDN博客 2. 基于TensorFlow2.3.0的垃圾分类 基于TensorFlow2.3.0的垃圾分类Android APP设计_def model_load(img_shape(224, 224, 3)_lilihewo的博客-CS…

flink 端到端一致性

背景 我们经常会混淆flink提供的状态一致性保证和数据端到端一致性保证的关系&#xff0c;总以为他们表达的是同一个意思&#xff0c;事实上&#xff0c;他们不是一个含义&#xff0c;flink只能保证其维护的内部状态的一致性&#xff0c;而数据端到端的一致性需要数据源&#…

安装samba服务器

1.实验目的 &#xff08;1&#xff09;了解SMB和NETBIOS的基本原理 &#xff08;2&#xff09;掌握Windows和Linux之间&#xff0c;Linux系统之间文件共享的基本方法。 2.实验内容 &#xff08;1&#xff09;安装samba服务器。 &#xff08;2&#xff09;配置samba服务器的…