【问题标题】:Looping over a list to create multiple data frames from SQL queries循环遍历列表以从 SQL 查询创建多个数据帧
【发布时间】: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])

【问题讨论】:

    标签: python pandas sqlite loops


    【解决方案1】:

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

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

    因此,您可以为此目的使用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 查询可能是使我的情况有所不同的罪魁祸首之一。对我来说最重要的时刻是字典可以包含数据框。这使它们比我意识到的更强大。
    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 2022-08-06
    • 2021-03-31
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多