You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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,无需手动管理数据库连接:

  1. 先安装库:pip install pandasql
  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:40:43