
本文旨在提供一种高效的方法,利用 Pandas 库对从 SQL 数据库中提取的数据进行重构,特别是将长格式数据转换为宽格式数据。我们将探讨如何通过预先筛选数据和使用 `pivot` 或 `set_index/unstack` 方法来优化数据重构过程,并讨论在 Python 中进行此类操作的性能瓶颈。同时,我们还会介绍如何在 SQL 查询层面进行数据透视,以获得更高的性能提升。
当从 SQL 数据库中提取数据并需要将其重构为特定格式时,Pandas 提供了强大的工具。以下是一些优化技巧,可以显著提高数据重构的速度。
1. 预先筛选数据
如果只需要数据集中特定类别的数据,例如示例中的 'A'、'B'、'C' 和 'D',则在进行数据透视之前,务必先筛选掉不需要的数据。这可以显著减少需要处理的数据量,从而提高性能。
import pandas as pd
# 假设 df 是从 SQL 数据库中读取的 Pandas DataFrame
agg_df = df.query("QuantityMeasured in ['A', 'B', 'C', 'D']")2. 使用 pivot 函数
Pandas 的 pivot 函数是重构数据的常用方法。它允许你指定索引列、列和值,从而将长格式数据转换为宽格式数据。
pivot_df = agg_df.pivot(index='Time', columns='QuantityMeasured', values='Value') time = pivot_df.index.tolist() A = pivot_df['A'].tolist() B = pivot_df['B'].tolist() C = pivot_df['C'].tolist() D = pivot_df['D'].tolist()
3. 使用 set_index 和 unstack
pivot 函数底层实际上是 set_index 和 unstack 的组合。在某些情况下,直接使用这两个函数可能会略微提高性能。
agg_df = (
df
.query("QuantityMeasured in ['A', 'B', 'C', 'D']")
.set_index(['Time', 'QuantityMeasured'])['Value'].unstack()
)4. 将结果转换为列表
如果需要将重构后的数据转换为列表,可以使用 values.tolist() 方法。
time = agg_df.index.tolist() list_of_A, list_of_B, list_of_C, list_of_D = agg_df.values.T.tolist()
虽然 Pandas 提供了强大的数据重构功能,但在某些情况下,在 SQL 查询层面进行数据透视可能更有效。这可以将数据重构的负担转移到数据库服务器,从而减轻 Python 程序的负担。
以下是一个示例 SQL 查询,用于将数据透视为所需的格式:
SELECT Time, SUM(CASE WHEN QuantityMeasured = 'A' THEN Value ELSE 0 END) AS A, SUM(CASE WHEN QuantityMeasured = 'B' THEN Value ELSE 0 END) AS B, SUM(CASE WHEN QuantityMeasured = 'C' THEN Value ELSE 0 END) AS C, SUM(CASE WHEN QuantityMeasured = 'D' THEN Value ELSE 0 END) AS D FROM your_table_name -- 将 your_table_name 替换为你的表名 GROUP BY Time;
此查询使用 CASE 语句和 SUM 函数来根据 QuantityMeasured 列的值计算每个 Time 的总和。结果是一个宽格式的表,其中每一列代表一个 QuantityMeasured 值。
优点:
缺点:
在 Python 中进行数据重构的性能受到多种因素的影响,包括数据量、数据类型和硬件配置。对于中等大小的数据集(例如 18.5k 数据点),期望在 0.02 秒内完成数据透视可能不切实际。
虽然可以通过优化 Pandas 代码或使用 SQL 数据透视来提高性能,但仍然存在一些限制。如果需要更高的性能,可以考虑使用更强大的硬件或使用其他数据处理技术,例如 Apache Spark。
本文介绍了如何使用 Pandas 和 SQL 来加速 SQL 表格数据的重构。通过预先筛选数据、使用 pivot 或 set_index/unstack 方法以及在 SQL 查询层面进行数据透视,可以显著提高数据重构的速度。在选择最佳方法时,应考虑数据量、性能要求和 SQL 复杂性等因素。记住,在数据库层面进行数据透视通常能带来显著的性能提升,尤其是在处理大量数据时。
以上就是使用 Pandas 加速 SQL 表格数据重构的实用指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号