【发布时间】:2014-04-25 21:05:53
【问题描述】:
我有一个从 ODBC 连接中提取的 pandas df:
import pandas.io.sql as psql
handle = pyodbc.connect('...')
df1 = psql.frame_query("select * from Table1 where... [some queries on columns]")
# below is a pandas df resulting from the above SQL query
df1 = pd.DataFrame([[1, 'F', 11111, 500, 60], [2, 'M', 22222, 400, 30], [3, 'M', 33333, 5400, 78], [4, 'F', 44444, 5400, 45], [5, 'M', 55555, 8914, 66]], columns = ['ID','Gender','ZipCd','Spend','Age'])
现在我想在同一个数据库中的不同表上运行一个单独的查询;并作为条件之一,从df1 中提取与 ID 匹配的行(例如,下面的行不工作)。
df2 = psql.frame_query("select * from Table2 where ID = ? and StatusCd in ('104', '106', '112', '115')", df1['ID'])
# The ID variable is a common unique identifier b/n the 2 tables
我的问题是,如何将df1['ID'] 分配为要在df2 中查询的元素列表?例如...where ID in (1,2,3,...),但使用 df1['ID'] 作为包含列表的对象。这将返回 df2 中的 ID 与 df1 以及其他查询条件匹配的记录。
我熟悉 w/R 语法,所以从概念上讲,我的问题非常类似于这个问题:Pass R variable to RODBC's sqlQuery?
归根结底,我有兴趣解析表 1,以便它仅包含在表 2 中找到的记录(即具有在表 2 中找到的必需 StatusCd 之一)。在这方面,我确信有一种更有效的方式来调用数据,并且可能在一个查询中,但我对 python 或 SQL 的了解还不够。
进一步评论
我有 pyodbc 作为标签,因为我最初是使用该模块从我的 SQL 服务器中提取的;也许 pyodbc 是用于此类任务的更有效方法?但我是一个 R/电子表格专家,到目前为止,pandas 对我来说是最容易学习的东西。
【问题讨论】:
-
df1[ID]是一列。您想要对每个元素进行单独查询,对所有元素进行一次查询,还是对其中 1 个元素进行一次查询? -
@PaulH 如果您指的是应该如何对待
df1['ID'],我相信我正在寻找一个查询 df1$ID 中的所有/任何元素。我已根据您的问题相应地编辑了我的帖子。
标签: python mysql pandas pyodbc