循环遍历列中的数据框值并使用 SQL 将它们用作 FROM 子句

Posted

技术标签:

【中文标题】循环遍历列中的数据框值并使用 SQL 将它们用作 FROM 子句【英文标题】:Looping through dataframe values in columns and using them as a FROM clause using SQL 【发布时间】:2021-09-30 14:32:58 【问题描述】:

我正在 Jupyter 笔记本中运行 BigQuery。

query ="""
SELECT 
    table_catalog, 
    table_schema, 
    table_name, 
FROM `Project-A.schema_A`.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS
"""

输出将我带到下表:

# This is the output of the query
data = 'table_catalog':['project-A', 'project-A', 'project-A', 'project-A','Project-A','Project-A','Project-A'],
        'table_catalog':['schema_A', 'schema_A', 'schema_A', 'schema_A','schema_A','schema_A','schema_A']
        'table_name':['Table_A', 'Table_B', 'Table_B', 'Table_C','Table_C','Table_A','Table_A']
 
d# Create DataFrame
df = pd.DataFrame(data)
 

我想在FROM CLAUSE 中的下一个查询中使用 Table_A、Table_B 和 Table_C,使其看起来像:

query =f"""
SELECT
*
FROM Project-A.Schema_A.I want to edit this dyanmically - either Table_A, Table_B, Table_C"""

我尝试了以下方法,但都失败了,请帮助我:

list_of_tables = list(df['table_name'].unique())

def loop_tables(x):
    for tables in list_of_tables:
        if x == tables
# x = df['table_name']
loop_tables()

【问题讨论】:

【参考方案1】:

试试这个

def loop_tables():
    list_of_dataframes = []
    for table in list_of_tables:
        print(table)
        dynamic_sql = "select * from project.dataset."
        dynamic_sql += table
        df = client.query(dynamic_sql).to_dataframe()
        list_of_dataframes.append(df)
    return list_of_dataframes
        

【讨论】:

谢谢!跟进问题。现在,我可以使用list_of_dataframes[0] 访问数据帧,直到list_of_dataframes[13]。这些基于之前创建的list_of_tables 变量 --> ['table1', table2',table3',table4'....]。有没有一种快速的方法来获取 list_of_dataframes[0] == 'table1' 直到 list_of_dataframes[13] == 'table14'。谢谢!仍然掌握python快捷方式的窍门(: 如果您详细说明您的后续查询会更容易。

以上是关于循环遍历列中的数据框值并使用 SQL 将它们用作 FROM 子句的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历 Pandas 数据帧并根据条件复制到新数据帧

循环遍历 pandas 数据框列中的列表元素以在新列中返回列表

循环遍历范围,如果单元格包含值,则复制到列中的下一个空单元格

检查 ND-Array 列中的 Nan 值并删除它们

循环遍历表和字段列表并混合它们

如何将数据框值“透视”到列中