《Pandas 简易速速上手小册》第8章:Pandas 高级数据分析技巧(2024 最新版)

在这里插入图片描述

文章目录

  • 8.1 使用 apply 和 map 函数
    • 8.1.1 基础知识
    • 8.1.2 重点案例:客户数据清洗和转换
    • 8.1.3 拓展案例一:产品评分调整
    • 8.1.4 拓展案例二:地址格式化
  • 8.2 性能优化技巧
    • 8.2.1 基础知识
    • 8.2.2 重点案例:大型销售数据分析
    • 8.2.3 拓展案例一:内存优化通过更高效的数据类型
    • 8.2.4 拓展案例二:使用并行处理加速数据清洗
  • 8.3 处理大型数据集
    • 8.3.1 基础知识
    • 8.3.2 重点案例:分块读取并处理销售数据
    • 8.3.3 拓展案例一:使用高效数据格式存储和读取
    • 8.3.4 拓展案例二:利用 Dask 处理超大数据集

8.1 使用 apply 和 map 函数

在 Pandas 中,applymap 函数是进行数据转换和运算的强大工具,它们提供了一种高效的方法来处理数据集中的元素。

8.1.1 基础知识

  1. apply 函数: 可以在 DataFrame 的轴(行或列)上应用一个函数,适用于需要访问多个列,或整个行/列的操作。
  2. map 函数: 主要用于 Series,将一个函数映射到 Series 的每个元素上,适用于元素级的转换和运算。
  3. applymap 函数: 在 DataFrame 的每个元素上应用一个函数,适用于元素级的操作,是 map 函数在 DataFrame 上的对应操作。

8.1.2 重点案例:客户数据清洗和转换

假设你有一份包含客户信息的数据集,需要进行数据清洗和转换。

数据准备

import pandas as pd# 示例客户数据
customer_data = {'name': ['Alice Smith', 'bob Johnson', 'CHARLIE BROWN'],'age': ['25', 'thirty-five', '40'],'email': ['alice@example.com', 'BOB@example.com', 'charlie@example.net']
}
customer_df = pd.DataFrame(customer_data)

数据清洗和转换

# 标准化姓名格式:首字母大写,其他字母小写
customer_df['name'] = customer_df['name'].apply(lambda x: x.title())# 转换年龄为数值类型:将非数字的年龄转换为 NaN,然后填充平均年龄
customer_df['age'] = pd.to_numeric(customer_df['age'], errors='coerce').fillna(customer_df['age'].dropna().astype(int).mean())# 邮箱地址转小写
customer_df['email'] = customer_df['email'].map(lambda x: x.lower())

8.1.3 拓展案例一:产品评分调整

有一份包含产品评分的数据集,需要对评分进行一定的调整。

数据准备

# 示例产品评分数据
product_scores = {'product_id': [1, 2, 3],'score': [4, 3.5, 5]
}
scores_df = pd.DataFrame(product_scores)

评分调整

# 对评分加权调整:评分低于5的乘以1.1,但不超过5
scores_df['adjusted_score'] = scores_df['score'].apply(lambda x: min(x * 1.1, 5))

8.1.4 拓展案例二:地址格式化

假设有一份包含客户地址的数据集,需要将地址格式统一化,去除多余的空格和标点。

数据准备

# 示例客户地址数据
address_data = {'customer_id': [1, 2, 3],'address': ['123 Elm St.', ' 456 Maple Ave', '789 Oak Dr, ']
}
address_df = pd.DataFrame(address_data)

地址格式化

# 去除地址中的标点和多余空格
import re
address_df['address'] = address_df['address'].apply(lambda x: re.sub(r'[^\w\s]', '', x.strip()))

通过这些案例,我们展示了如何使用 applymap 函数进行数据清洗和转换。这些函数为处理复杂的数据转换提供了灵活而强大的方法,使得数据预处理变得更加高效和简洁。

在这里插入图片描述


8.2 性能优化技巧

在处理大型数据集时,性能成为一个不可忽视的因素。优化数据处理性能不仅可以节省时间,还能提高数据分析的效率。

8.2.1 基础知识

  1. 向量化操作: 利用 Pandas 和 NumPy 的向量化操作代替循环,可以显著提高执行速度。
  2. 使用更高效的数据类型: 比如将浮点数列转换为整数类型(如果可能),使用分类类型等,可以减少内存使用。
  3. 批处理处理大数据: 分批次处理数据而不是一次性加载整个数据集到内存中。
  4. 并行处理: 在可能的情况下,利用多核 CPU 进行并行处理。

8.2.2 重点案例:大型销售数据分析

假设你有一份非常大的销售数据集,需要计算每个产品的总销售额。

数据准备

import pandas as pd
import numpy as np# 生成大型销售数据示例
np.random.seed(0)
sales_data = {'product_id': np.random.randint(1, 100, 1000000),'sales_amount': np.random.rand(1000000) * 100
}
sales_df = pd.DataFrame(sales_data)

性能优化

# 向量化计算总销售额
total_sales = sales_df.groupby('product_id')['sales_amount'].sum()

8.2.3 拓展案例一:内存优化通过更高效的数据类型

处理包含数百万条记录的客户数据集,需要将数据类型转换为更高效的格式以减少内存使用。

数据准备

# 生成大型客户数据示例
customer_data = {'customer_id': np.arange(1, 1000001),'age': np.random.randint(18, 80, 1000000),'email_count': np.random.randint(1, 10, 1000000)
}
customer_df = pd.DataFrame(customer_data)

内存优化

# 转换数据类型
customer_df['customer_id'] = customer_df['customer_id'].astype('int32')
customer_df['age'] = customer_df['age'].astype('int8')
customer_df['email_count'] = customer_df['email_count'].astype('int8')

8.2.4 拓展案例二:使用并行处理加速数据清洗

假设需要对一份大型文本数据集进行清洗,包括去除特殊字符、转换大小写等。

数据准备

# 生成大型文本数据示例
text_data = ['This is a SAMPLE text.' * 10 for _ in range(100000)]
text_df = pd.DataFrame(text_data, columns=['text'])

并行处理

由于 Pandas 直接不支持并行处理,此示例暂略。在实际应用中,可以考虑使用 dask 库或 multiprocessing 库来实现数据的并行处理。

通过这些案例,我们展示了如何通过向量化操作、优化数据类型、批处理处理大数据以及并行处理等技巧来提高数据处理的性能。这些方法对于处理大型数据集尤其重要,可以帮助你在保证分析质量的同时,显著减少处理时间和内存消耗。

在这里插入图片描述


8.3 处理大型数据集

处理大型数据集时,传统的数据处理方法可能会受到内存限制的影响,导致效率低下或无法执行。优化数据处理流程,使其能够高效地处理大型数据集,是提高分析效率的关键。

8.3.1 基础知识

  1. 分块处理: 将大型数据集分成小块,逐块加载处理,而不是一次性加载整个数据集到内存中。
  2. 高效的数据格式: 使用如 Parquet、HDF5 等高效的数据存储格式,可以加速数据读写操作,并降低内存使用。
  3. 使用 Dask 等工具: 对于特别大的数据集,可以使用如 Dask 这样的库,它支持并行计算并优化内存使用。

8.3.2 重点案例:分块读取并处理销售数据

假设你有一个非常大的销售记录文件,无法一次性加载到内存中,需要分块进行处理。

数据准备

此处我们模拟创建一个大型文件的过程,实际操作中你可能直接操作现有的大文件。

import pandas as pd
import numpy as np# 生成示例销售数据并保存到 CSV 文件
chunk_size = 10000
num_chunks = 500
for i in range(num_chunks):df = pd.DataFrame({'SaleID': range(i * chunk_size, (i + 1) * chunk_size),'ProductID': np.random.randint(1, 100, chunk_size),'SaleAmount': np.random.rand(chunk_size) * 100})df.to_csv('/mnt/data/sales_large.csv', mode='a', index=False, header=(i == 0))

分块读取和处理

chunk_iter = pd.read_csv('/mnt/data/sales_large.csv', chunksize=chunk_size)total_sales = 0
for chunk in chunk_iter:total_sales += chunk['SaleAmount'].sum()
print(f"Total sales amount: {total_sales}")

8.3.3 拓展案例一:使用高效数据格式存储和读取

将大型数据集转换为更高效的格式,如 Parquet,以优化读写速度和降低内存消耗。

# 假设 df 是一个大型 DataFrame
df.to_parquet('/mnt/data/sales_large.parquet')# 读取 Parquet 文件
df_parquet = pd.read_parquet('/mnt/data/sales_large.parquet')

8.3.4 拓展案例二:利用 Dask 处理超大数据集

对于超大型数据集,Pandas 可能不足以高效处理。此时可以考虑使用 Dask。

# 注意:此代码示例需要在支持 Dask 的环境中运行
from dask import dataframe as dd# 读取数据
dask_df = dd.read_csv('/mnt/data/sales_large.csv')# 使用 Dask 进行计算
total_sales_dask = dask_df['SaleAmount'].sum().compute()
print(f"Total sales amount with Dask: {total_sales_dask}")

通过这些案例,我们展示了如何处理大型数据集,包括分块处理数据、使用高效的数据格式,以及利用 Dask 进行超大数据集的分析。这些技巧对于处理和分析大规模数据集至关重要,可以帮助你克服内存限制,提高数据处理效率。

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

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

相关文章

BUUCTF-Real-[Flask]SSTI

目录 漏洞描述 模板注入漏洞如何产生? 漏洞检测 漏洞利用 get flag ​编辑 漏洞描述 Flask框架(jinja2)服务端模板注入漏洞分析(SSTI) Flask 是一个 web 框架。也就是说 Flask 为您提供工具、库和技术来允许您构…

JAVA面试题之三分布式和微服务的区别是什么?

面试题之三 分布式和微服务的区别是什么? 难度指数:3星 考察频率:50% 开发年限:3年左右 二者是隶属于不同的概念。 一.概念 微服务是系统架构的设计方式,是将复杂的业务拆分成多个微型的服务,让这些服务可以单独部署和运行。服务与服务之间可以使用RPC、OpenFeign…

基于PSO-BP神经网络的风电功率MATLAB预测程序

微❤关注“电气仔推送”获得资料(专享优惠) 参考文献 基于风电场运行特性的风电功率预测及应用分析——倪巡天 资源简介 由于自然风具有一定的随机性、不确定性与波动性,这将会使风电场的功率预测受到一定程度的影响,它们之间…

骨传导耳机的工作原理是什么?跟一般的耳机相比有什么特点?

骨传导耳机是利用骨传导技术研发而成一种新型蓝牙耳机,其传声方式很独特,不通过空气传导,而是通过人体骨骼来传递声音。 和传统的耳机相比,在佩戴方式和传声方式上都有所不同。 1、佩戴方式不同 首先就是佩戴方式不同&#xff0…

Java实现学生信息管理系统:从Excel中提取数据的实用方法

在Java中实现学生信息管理系统并从Excel中读取数据,通常适用于以下场景: 数据迁移和集成:如果你有一个现存的学生信息管理系统,该系统可能使用数据库或其他存储方式,但你想将这些数据迁移到新的系统。Excel文件可能提…

自动化测试框架:DrissionPage

自动化测试框架:DrissionPage 如果只要控制浏览器,导入ChromiumPage:如果只要收发数据包,导入SessionPage:WebPage是功能最全面的页面类,既可控制浏览器,也可收发数据包。常用1、定位元素2、爬取…

Spring Boot--08--Mybatis 之Mapper在IDEA中自动注入警告的解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 问题原因 解决方案方法1:为 Autowired 注解设置required false方法2:用 Resource 替换 Autowired方法3:在Mapper接口上加上Repo…

EXCEL VBA调用百度api识别身份证

EXCEL VBA调用百度api识别身份证 Sub BC_识别身份证()Dim SHD, SHX As WorksheetDim AppKey, SecretKey, Token, PathY As StringDim jSon, JSonA, WithHttp As ObjectDim Pic, oDom, oW, jsCode, paramsDim ARX, BRX, DRX, ERX, ZADDim StrText, StrUrl As StringDim StrA, S…

振动传感器接头MIL-C-5015玻璃烧结插座

振动传感器接头MIL-C-5015玻璃烧结插座产品主要用于加速度传感器,倾角传感器,耐高低温,耐腐蚀,适合使用恶劣环境。适用品牌有:MEGGITT,VibraSens,CTC measurement,BENTLY(本特利)等众多品牌可定…

【代码随想录-链表】环形链表 II

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

C++ 入门(五)— 头文件(Header files)

文章目录 头文件的用途使用标准库头文件使用头文件传播前向声明避免将函数或变量定义放在头文件中尖括号与双引号VSCode中添加来自其他目录的头文件 头文件保护标头保护不会阻止标头包含在不同的代码文件中pragma once总结 头文件的用途 C 代码文件(扩展名为 .cpp&…

基于Java SSM框架实现教师管理系统项目【项目源码】

基于java的SSM框架实现教师管理系统演示 JAVA简介 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,JSP(java server p…

网络空间测绘在安全领域的应用(下)

3.漏洞感知 漏洞感知能力在当今的网络安全领域是至关重要的,而其核心技术之一是漏洞验证技术。通过对漏洞信息与产品版本的关联,系统能够更准确地感知漏洞,但仅仅依靠这种数据关联会引发一系列问题。 首先,漏洞是程序中存在的隐…

chatchat部署在ubuntu上的坑

1. 安装前要开代理,注意要下载很多东西,流量大 https://gitee.com/zhaodezan/chatchat 2. 不必要的步骤 下载模型需要先安装 Git LFS ,然后运行 $ git lfs install $ git clone https://huggingface.co/THUDM/chatglm3-6b $ git clone https://huggingface.co/B…

YOLOv5改进:下采样系列 |一种新颖的基于 Haar 小波的下采样HWD,有效涨点系列

💡💡💡本文独家改进:HWD的核心思想是应用Haar小波变换来降低特征图的空间分辨率,同时保留尽可能多的信息,与传统的下采样方法相比,有效降低信息不确定性。 💡💡💡使用方法:代替原始网络的conv,下采样过程中尽可能包括更多信息,从而提升检测精度。 收录 YO…

Java-File类

目录 前言: 1.File类概述 2.File类属性 3.File类构造方法 4.File类普通方法 前言: 在Java中操作文件主要分为:1.文件系统的操作(File类)、2.文件内容的操作(流对象)。 本节主要介绍Java中的…

数据加密算法多样化的安全需求

数据加密算法是信息安全领域中非常重要的一环,它能够确保数据在传输和存储过程中的机密性和完整性。随着技术的发展,数据加密算法也在不断地演进和改进,以满足更为复杂和多样化的安全需求。 数据加密算法的基本原理是使用加密密钥和加密算法对…

MAC word删除空白页

问题:MAC word删除空白页 解决: option删除键

【计算机网络】Socket的SO_REUSEADDR选项与TIME_WAIT

SO_REUSEADDR用于设置套接字的地址重用。当一个套接字关闭后,它的端口可能会在一段时间内处于TIME_WAIT状态,此时无法立即再次绑定相同的地址和端口。使用SO_REUSEADDR选项可以允许新的套接字立即绑定到相同的地址和端口,即使之前的套接字仍处…

使用 Spring Boot 构建 Docker 镜像的简易指南

Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用程序的框架。结合 Docker,你可以方便地将你的 Spring Boot 应用程序打包成一个容器镜像,实现更加灵活和可移植的部署。本文将指导你如何使用 Docker 构建一个包含 Spring Boot 应用程序的镜像。…