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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 《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 
目录
相关文章
|
16天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
45 0
|
2月前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas进行数据分析基础
使用Python和Pandas进行数据分析基础
56 5
|
10天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
26 2
|
17天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
30 2
|
8天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
8天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
1月前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
49 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
1月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
40 1
|
2月前
|
数据挖掘 Python
Pandas实战(1):电商购物用户行为数据分析
Pandas实战(1):电商购物用户行为数据分析
91 1
|
2月前
|
数据挖掘 Python
Pandas实战(3):电商购物用户行为数据分析
Pandas实战(3):电商购物用户行为数据分析
110 1