循环遍历列表以从 SQL 查询创建多个数据帧

Posted

技术标签:

【中文标题】循环遍历列表以从 SQL 查询创建多个数据帧【英文标题】:Looping over a list to create multiple data frames from SQL queries 【发布时间】:2022-01-20 03:18:21 【问题描述】:

我有一个 SQLite 查询,我想多次运行以根据感兴趣的年份创建多个 Pandas 数据框。像这样的东西(但这绝对行不通)。基本上,我试图在year 列表上循环创建数据框以创建 4 个数据框(每年 1 个),即使经过相当多的谷歌搜索,我现在仍然无法做到这一点。

year = [2018, 2019, 2020, 2021]

query = '''
SELECT 
    some stuff
FROM table
WHERE table.YEAR = ?
'''
for x in year:
  df[x] = pd.read_sql_query(query, db, params=[x])

【问题讨论】:

【参考方案1】:

在 for 循环的每次迭代中都创建一个新的数据框是个坏主意。 原因有很多,最突出的是:

    创建的名称可能很容易与您的逻辑已使用的变量发生冲突。
    由于名称是动态创建的,因此您通常还需要使用动态技术来检索数据。

因此,您可以为此目的使用dictionary

我从this 帖子中得到了这些报价。

您可以这样做: 注意:我使用了一个具有代表性的示例,其中使用了我拥有的示例 SQL 表。

数据如下:

您的代码将如下所示:

query = '''
SELECT 
    *
FROM books
WHERE id = id;
'''

d = 
for i in id:
    sql = query.format(id = i)
    temp = pd.read_sql_query(sql, db_connection)
    d[i] = pd.DataFrame(temp)

您可以使用索引访问字典中的数据框。

【讨论】:

谢谢!您的解决方案就像一个魅力。我也遇到了您链接到的帖子,但不太理解所说的内容,并认为我的 SQL 查询可能是使我的情况有所不同的罪魁祸首之一。对我来说最重要的时刻是字典可以包含数据框。这使它们比我意识到的更强大。

以上是关于循环遍历列表以从 SQL 查询创建多个数据帧的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历数据框列表以动态创建新列

R-如何在列表上循环并输出不同的数据帧

雪花 SQL udf 的输入列表

使用SQL While循环遍历列表

将通过 FOR 循环函数输出的多个数据帧合并为一个数据帧

Cassandra&Spark:我可以将项目添加到行以从行列表创建数据框