如何更高效合并两个SQL查询的Pandas DataFrame?或用单SQL实现
问题:用单条SQL查询替代两次查询合并的高效方案?
我需要从SQL数据库的两张表中获取数据:从my_table提取指定时间范围的业务数据,从config表提取对应每一列数据的单位(单位与数据列是1:1对应)。
目前我通过两次查询再合并的方式实现了需求:先查询业务数据得到DataFrame,再查询单位信息并转置为行,最后将单位行与数据行合并,得到单位行在前、数据行在后的结果(示例见下方)。但我希望找到更高效的处理方式,尤其是能否直接通过单条SQL查询生成目标DataFrame?
当前实现代码:
import pandas as pd import pyodbc # 连接数据库 conn = pyodbc.connect('<connection info here>') # 查询'my_table'中指定时间范围内的所有数据 query_data = "SELECT * FROM my_table WHERE timestamp BETWEEN '2024/10/24 11:00:00' AND '2024/10/24 12:00:00'" # 查询'config'表中'my_table'对应项的单位 query_units = "SELECT units FROM config WHERE t_name=my_table" # 获取包含请求数据的DataFrame df = pd.read_sql_query(query_data, conn, 'timestamp') # 获取每个数据项的单位DataFrame,因返回单列故转置为行(以数据列名为索引) eu = pd.read_sql_query(query_units, conn, index=df.columns).T # 合并单位行与数据行,按df.columns(数据值名称)对齐 df = pd.concat(objs=(eu, df))
示例输出结果(当前代码执行正确):
data1 data2 data3 ... dataN units volts amps temp ... volts (这是插入的单位行) 11:00 10 5 69 ... 9 11:30 11 5 70 ... 10 12:00 12 6 72 ... 9
内容的提问来源于stack exchange,提问作者JRiggles
相关产品推荐
相关产品推荐

