如何为pd.read_sql_query设置con参数以SQL连接多个Pandas DataFrame?
解决Pandas用SQL连接多个DataFrame的con参数问题
pd.read_sql_query的con参数接受的是数据库连接对象,不能直接传入多个DataFrame。要实现用SQL连接多个DataFrame,推荐以下两种方法:
方法一:使用SQLite内存数据库(无需额外依赖)
通过创建内存中的SQLite数据库,将每个DataFrame写入为独立数据表,再执行SQL查询:
import pandas as pd import sqlite3 # 读取CSV生成DataFrame df1 = pd.read_csv("C:/Users/name/sheet1.csv") df2 = pd.read_csv("C:/Users/name/sheet2.csv") df3 = pd.read_csv("C:/Users/name/sheet3.csv") # 创建内存数据库连接 conn = sqlite3.connect(':memory:') # 将DataFrame写入数据库,表名与SQL中引用的名称对应 df1.to_sql('df1', conn, index=False) df2.to_sql('df2', conn, index=False) df3.to_sql('df3', conn, index=False) # 执行SQL查询 sql=""" select t4.*, sum(t3.col1) from ( select t1.col1, t2.col2 from df2 as t2 join df1 as t1 on t1.col1 = t2.col2 ) as t4 join df3 as t3 on t4.col1 = t3.col3 group by t4.col1, t4.col2 -- 聚合函数需配合GROUP BY,避免结果异常 """ df4 = pd.read_sql_query(sql, con=conn) # 关闭连接 conn.close()
方法二:使用pandasql库(更简洁)
pandasql允许直接基于DataFrame执行SQL,无需手动管理数据库连接:
- 先安装库:
pip install pandasql - 用
sqldf函数执行查询,传入SQL和包含所有DataFrame的环境变量:
import pandas as pd from pandasql import sqldf df1 = pd.read_csv("C:/Users/name/sheet1.csv") df2 = pd.read_csv("C:/Users/name/sheet2.csv") df3 = pd.read_csv("C:/Users/name/sheet3.csv") # 定义SQL查询 sql=""" select t4.*, sum(t3.col1) from ( select t1.col1, t2.col2 from df2 as t2 join df1 as t1 on t1.col1 = t2.col2 ) as t4 join df3 as t3 on t4.col1 = t3.col3 group by t4.col1, t4.col2 """ # 执行查询,locals()自动传入当前作用域的所有DataFrame df4 = sqldf(sql, locals())
内容的提问来源于stack exchange,提问作者kaispace30098
相关产品推荐
相关产品推荐

