当前位置: 首页 > news >正文

《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 进行超大数据集的分析。这些技巧对于处理和分析大规模数据集至关重要,可以帮助你克服内存限制,提高数据处理效率。

相关文章:

《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 拓展案…...

计算机网络_1.6.2 计算机网络体系结构分层的必要性

1.6.2 计算机网络体系结构分层的必要性 一、五层原理体系结构每层各自主要解决什么问题1、物理层2、数据链路层3、网络层4、运输层5、应用层 二、总结三、练习 笔记来源: B站 《深入浅出计算机网络》课程 本节主要介绍实现计算机网络需要解决哪些问题?以…...

跟着cherno手搓游戏引擎【18】抽象Shader、项目小修改

抽象&#xff1a; Shader.h: #pragma once #include <string>namespace YOTO {class Shader {public:virtual~Shader()default;virtual void Bind()const0;virtual void UnBind()const0;static Shader* Create(const std::string& vertexSrc, const std::string&am…...

每日OJ题_算法_模拟②_力扣495. 提莫攻击

目录 力扣495. 提莫攻击 解析代码 力扣495. 提莫攻击 495. 提莫攻击 难度 简单 在《英雄联盟》的世界中&#xff0c;有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希&#xff08;编者注&#xff1a;寒冰射手&#xff09;进入中毒状态。 当提莫攻击艾希&#xff0c…...

freertos 源码分析二 list链表源码

list.c 一、链表初始化 void vListInitialise( List_t * const pxList ) { pxList->pxIndex ( ListItem_t * ) &…...

Peter算法小课堂—Dijkstra最短路算法

大家好&#xff0c;我们人见人爱、花见花开、车见车爆胎的Peter Pan来啦&#xff0c;hia~hia~hia。今天&#xff0c;我们今天来学习毒瘤的最短路算法啦。啊这……什么是Dijkstra算法&#xff1f;长文警告⚠ 正经点啊 手算样例 大家思考一下&#xff0c;你在手算样例的时候&am…...

Python 读取和写入包含中文的csv、xlsx、json文件

背景 最近在做数据的训练&#xff0c;经常需要读取写入csv、xlsx、json文件来获取数据&#xff0c;在这里做简单总结记录。 ps: 读取和写入中文文件时&#xff0c;需要确保文件的编码格式是正确的。通常情况使用UTF-8编码格式。如果使用其他编码格式可能会导致读取或写入时出…...

【算法】利用递归dfs解决二叉树算法题(C++)

文章目录 1. 前言2. 算法题2331.计算布尔二叉树的值129.求根节点到叶节点数字之和LCR047.二叉树剪枝98.验证二叉搜索树230.二叉搜索树中第K小的元素257.二叉树的所有路径 1. 前言 有关 递归 的相关解释与解题 请看下文&#xff1a; 以汉诺塔理解递归、并用递归解决算法题 对于…...

计算机网络_1.6.1 常见的三种计算机网络体系结构

1.6.1 常见的三种计算机网络体系结构 1、OSI&#xff08;七层协议&#xff09;标准失败的原因2、TCP/IP参考模型3、三种网络体系结构对比 笔记来源&#xff1a; B站 《深入浅出计算机网络》课程 1、OSI&#xff08;七层协议&#xff09;标准失败的原因 &#xff08;1&#xf…...

XML传参方式

export function groupLoginAPI(xmlData) {return http.post(/tis/group/1.0/login, xmlData, {headers: {Content-Type: application/xml,X-Requested-With: AAServer/4.0,}}) }import {groupLoginAPI} from "../api/user"; function (e) { //xml格式传参let groupX…...

Pyecharts炫酷散点图构建指南【第50篇—python:炫酷散点图】

文章目录 Pyecharts炫酷散点图构建指南引言安装Pyecharts基础散点图自定义散点图样式渐变散点图动态散点图高级标注散点图多系列散点图3D散点图时间轴散点图笛卡尔坐标系下的极坐标系散点图 总结&#xff1a; Pyecharts炫酷散点图构建指南 引言 在数据可视化领域&#xff0c;…...

关于爬取所有哔哩哔哩、任意图片、所有音乐、的python脚本语言-Edge浏览器插件 全是干货!

这些都是现成的并且实时更新的&#xff01;从次解放双手&#xff01; 首先有自己的edge浏览器基本上都有并且找到插件选项 1.哔哩哔哩视频下载助手&#xff08;爬取哔哩哔哩视频&#xff09; bilibili哔哩哔哩视频下载助手 - Microsoft Edge Addons 下面是效果&#xff1a; 2.图…...

压力测试工具-Jmeter使用总结

目录 一.前言 二.线程组 三.线程组的组件 四.线程组-HTTP请求 1、JSON提取器 2、XPATH提取器 3、正则表达式提取器 五.线程组-断言 1、响应断言 2、JSON断言 六.创建测试 1.创建线程组 2.配置元件 3.构造HTTP请求 4.添加HTTP请求头 5.添加断言 6.添加查看结果树…...

[cmake]CMake Error: Could not create named generator Visual Studio 16 2019解决方法

配置flycv时&#xff0c;cmake以下代码会报错第二行的错误&#xff0c;网上解决方法为第三行代码 cmake .. -G "Visual Studio 16 2019 Win64" CMake Error: Could not create named generator Visual Studio 16 2019 cmake .. -G "Visual Studio 16 2019"…...

2024美赛数学建模D题思路分析 - 大湖区水资源问题

1 赛题 问题D&#xff1a;大湖区水资源问题 背景 美国和加拿大的五大湖是世界上最大的淡水湖群。这五个湖泊和连接的水道构成了一个巨大的流域&#xff0c;其中包含了这两个国家的许多大城市地区&#xff0c;气候和局部天气条件不同。 这些湖泊的水被用于许多用途&#xff0…...

2024 高级前端面试题之 HTTP模块 「精选篇」

该内容主要整理关于 HTTP模块 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 HTTP模块精选篇 1. HTTP 报文的组成部分2. 常见状态码3. 从输入URL到呈现页面过程3.1 简洁3.2 详细 4. TCP、UDP相关5. HTTP2相关6. https相关7. WebSocket的…...

【Linux C | 网络编程】netstat 命令图文详解 | 查看网络连接、查看路由表、查看统计数据

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

Python爬虫存储库安装

如果你还没有安装好MySQL、MongoDB、Redis 数据库&#xff0c;请参考这篇文章进行安装&#xff1a; Windows、Linux、Mac数据库的安装&#xff08;mysql、MongoDB、Redis&#xff09;-CSDN博客 存储库的安装 上节中&#xff0c;我们介绍了几个数据库的安装方式&#xff0c;但…...

用函数求最小公倍数和最大公约数(c++题解)

题目描述 输入两个正整数m和n&#xff0c;求其最大公约数和最小公倍数。 提示&#xff0c;求最大公约数用一个函数实现。本题求最大公约数必须用高效算法&#xff0c;如辗转相除法&#xff0c;朴素算法要超时。 输入格式 第1行&#xff1a;两个非整数&#xff0c;值在0&…...

鲜花销售|鲜花销售小程序|基于微信小程序的鲜花销售系统设计与实现(源码+数据库+文档)

鲜花销售小程序目录 目录 基于微信小程序的鲜花销售系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、前台功能模块 2、后台功能模块 (1) 后台登录 (2) 管理员功能模块 用户管理 商家管理 鲜花信息管理 鲜花分类管理 管理员管理 系统管理 (3) 商家功…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…...