上海微网站制作建设,做动画视频的网站,.vip网站 被百度收录,网站建站麻烦吗文章目录 8.1 使用 apply 和 map 函数8.1.1 基础知识8.1.2 重点案例#xff1a;客户数据清洗和转换8.1.3 拓展案例一#xff1a;产品评分调整8.1.4 拓展案例二#xff1a;地址格式化 8.2 性能优化技巧8.2.1 基础知识8.2.2 重点案例#xff1a;大型销售数据分析8.2.3 拓展案… 文章目录 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 中apply 和 map 函数是进行数据转换和运算的强大工具它们提供了一种高效的方法来处理数据集中的元素。
8.1.1 基础知识
apply 函数: 可以在 DataFrame 的轴行或列上应用一个函数适用于需要访问多个列或整个行/列的操作。map 函数: 主要用于 Series将一个函数映射到 Series 的每个元素上适用于元素级的转换和运算。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: [aliceexample.com, BOBexample.com, charlieexample.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], errorscoerce).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()))通过这些案例我们展示了如何使用 apply 和 map 函数进行数据清洗和转换。这些函数为处理复杂的数据转换提供了灵活而强大的方法使得数据预处理变得更加高效和简洁。 8.2 性能优化技巧
在处理大型数据集时性能成为一个不可忽视的因素。优化数据处理性能不仅可以节省时间还能提高数据分析的效率。
8.2.1 基础知识
向量化操作: 利用 Pandas 和 NumPy 的向量化操作代替循环可以显著提高执行速度。使用更高效的数据类型: 比如将浮点数列转换为整数类型如果可能使用分类类型等可以减少内存使用。批处理处理大数据: 分批次处理数据而不是一次性加载整个数据集到内存中。并行处理: 在可能的情况下利用多核 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 基础知识
分块处理: 将大型数据集分成小块逐块加载处理而不是一次性加载整个数据集到内存中。高效的数据格式: 使用如 Parquet、HDF5 等高效的数据存储格式可以加速数据读写操作并降低内存使用。使用 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, modea, indexFalse, header(i 0))分块读取和处理
chunk_iter pd.read_csv(/mnt/data/sales_large.csv, chunksizechunk_size)total_sales 0
for chunk in chunk_iter:total_sales chunk[SaleAmount].sum()
print(fTotal 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(fTotal sales amount with Dask: {total_sales_dask})通过这些案例我们展示了如何处理大型数据集包括分块处理数据、使用高效的数据格式以及利用 Dask 进行超大数据集的分析。这些技巧对于处理和分析大规模数据集至关重要可以帮助你克服内存限制提高数据处理效率。