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

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

c8d8ed47f9a1368db458c1960ee26c7.png

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

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
2天前
|
数据可视化 数据挖掘 数据处理
进阶 pandas DataFrame:挖掘高级数据处理技巧
【5月更文挑战第19天】本文介绍了Pandas DataFrame的高级使用技巧,包括数据重塑(如`pivot`和`melt`)、字符串处理(如提取和替换)、日期时间处理(如解析和时间序列操作)、合并与连接(如`merge`和`concat`),以及使用`apply()`应用自定义函数。这些技巧能提升数据处理效率,适用于复杂数据分析任务。推荐进一步学习和探索Pandas的高级功能。
|
2天前
|
数据挖掘 数据处理 Python
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧
【5月更文挑战第19天】在 Python 数据分析中,pandas DataFrame 是核心工具。本文介绍了几个高级技巧:1) 横向合并 DataFrame;2) 数据分组与聚合;3) 处理缺失值;4) 数据重塑;5) 条件筛选;6) 使用函数处理数据。掌握这些技巧能提升数据处理效率和分析深度,助你更好地发掘数据价值。
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧
|
6天前
|
数据采集 数据可视化 数据挖掘
利用Python和Pandas库优化数据分析流程
在当今数据驱动的时代,数据分析已成为企业和个人决策的重要依据。Python作为一种强大且易于上手的编程语言,配合Pandas这一功能丰富的数据处理库,极大地简化了数据分析的流程。本文将探讨如何利用Python和Pandas库进行高效的数据清洗、转换、聚合以及可视化,从而优化数据分析的流程,提高数据分析的效率和准确性。
|
6天前
|
SQL 数据采集 数据挖掘
构建高效的Python数据处理流水线:使用Pandas和NumPy优化数据分析任务
在数据科学和分析领域,Python一直是最受欢迎的编程语言之一。本文将介绍如何通过使用Pandas和NumPy库构建高效的数据处理流水线,从而加速数据分析任务的执行。我们将讨论如何优化数据加载、清洗、转换和分析的过程,以及如何利用这些库中的强大功能来提高代码的性能和可维护性。
|
6天前
|
数据可视化 数据挖掘 BI
【Python】—— pandas 数据分析
【Python】—— pandas 数据分析
20 1
|
6天前
|
数据采集 数据可视化 数据挖掘
如何利用Python中的Pandas库进行数据分析和可视化
Python的Pandas库是一种功能强大的工具,可以用于数据分析和处理。本文将介绍如何使用Pandas库进行数据分析和可视化,包括数据导入、清洗、转换以及基本的统计分析和图表绘制。通过学习本文,读者将能够掌握利用Python中的Pandas库进行高效数据处理和可视化的技能。
|
6天前
|
数据采集 SQL 数据挖掘
Python数据分析中的Pandas库应用指南
在数据科学和分析领域,Python语言已经成为了一种非常流行的工具。本文将介绍Python中的Pandas库,该库提供了强大的数据结构和数据分析工具,使得数据处理变得更加简单高效。通过详细的示例和应用指南,读者将了解到如何使用Pandas库进行数据加载、清洗、转换和分析,从而提升数据处理的效率和准确性。
|
6天前
|
数据可视化 数据挖掘 C++
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
|
6天前
|
算法 数据挖掘 数据处理
数据分析Pandas之Series,快速上手
数据分析Pandas之Series,快速上手
|
6天前
|
数据采集 机器学习/深度学习 数据可视化
Pandas在数据分析中有广泛的应用场景
Pandas是数据分析利器,适用于数据清洗(处理缺失值、重复项、异常值)、探索分析(统计量、图表)、预处理(特征提取、编码、选择)、建模(线性回归、聚类等)及可视化,与Matplotlib等库配合提升效率。
10 1