
本文旨在提供一种高效的方法,利用 Pandas 库对从 SQL 数据库中提取的数据进行重构,特别是将长格式数据转换为宽格式数据。我们将探讨如何通过预先筛选数据和使用 `pivot` 或 `set_index/unstack` 方法来优化数据重构过程,并讨论在 Python 中进行此类操作的性能瓶颈。同时,我们还会介绍如何在 SQL 查询层面进行数据透视,以获得更高的性能提升。
Pandas 数据重构优化
当从 SQL 数据库中提取数据并需要将其重构为特定格式时,Pandas 提供了强大的工具。以下是一些优化技巧,可以显著提高数据重构的速度。
1. 预先筛选数据
如果只需要数据集中特定类别的数据,例如示例中的 ‘A’、’B’、’C’ 和 ‘D’,则在进行数据透视之前,务必先筛选掉不需要的数据。这可以显著减少需要处理的数据量,从而提高性能。
import pandas as pd# 假设 df 是从 SQL 数据库中读取的 Pandas DataFrameagg_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()
SQL 数据透视
虽然 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 DFROM your_table_name -- 将 your_table_name 替换为你的表名GROUP BY Time;
此查询使用 CASE 语句和 SUM 函数来根据 QuantityMeasured 列的值计算每个 Time 的总和。结果是一个宽格式的表,其中每一列代表一个 QuantityMeasured 值。
优点:
性能提升: 在数据库服务器上进行数据透视通常比在 Python 中使用 Pandas 更快。减少数据传输: 通过在数据库中进行数据透视,可以减少需要传输到 Python 程序的数据量。
缺点:
SQL 复杂性: 编写 SQL 查询进行数据透视可能比使用 Pandas 更复杂。数据库依赖性: 此方法依赖于数据库服务器的功能。
性能考量
在 Python 中进行数据重构的性能受到多种因素的影响,包括数据量、数据类型和硬件配置。对于中等大小的数据集(例如 18.5k 数据点),期望在 0.02 秒内完成数据透视可能不切实际。
虽然可以通过优化 Pandas 代码或使用 SQL 数据透视来提高性能,但仍然存在一些限制。如果需要更高的性能,可以考虑使用更强大的硬件或使用其他数据处理技术,例如 Apache Spark。
总结
本文介绍了如何使用 Pandas 和 SQL 来加速 SQL 表格数据的重构。通过预先筛选数据、使用 pivot 或 set_index/unstack 方法以及在 SQL 查询层面进行数据透视,可以显著提高数据重构的速度。在选择最佳方法时,应考虑数据量、性能要求和 SQL 复杂性等因素。记住,在数据库层面进行数据透视通常能带来显著的性能提升,尤其是在处理大量数据时。
以上就是使用 Pandas 加速 SQL 表格数据重构的实用指南的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1377419.html
微信扫一扫
支付宝扫一扫