python - 如果存在于列表中,则根据另一列的值选择列
问题描述
我正在尝试使用pandas.read_gbq
基于列 C 的值(如果存在于列表中)从我的 Bigquery 表中选择列 A 和 B。但是,当我format
在查询字符串中插入列表时,列表的内容会被[]
方括号括起来。这打破了我的查询。
我replace
在查询字符串上使用了手动删除方括号。
values_in_list = ['a', 'b', 'c']
query = """
SELECT
column_A,
column_B
FROM
my_table
WHERE
column_C IN ({})
""".format(values_in_list).replace('[', '').replace(']', '')
query_df = pandas.read_gbq(query, project_id='some-project', dialect='standard')
这可以完成工作。我想知道是否有比暴力破解更优雅的解决方案。
解决方案
我不确定是否pandas.read_gbq
支持关键字 arg ArrayQueryParameters
。query_config
这是我的解决方法:
from google.cloud import bigquery
client = bigquery.Client()
values_in_list = ['a', 'b', 'c']
query = """
SELECT
column_A,
column_B
FROM
my_table
WHERE
column_C IN UNNEST(@col_c_vals)
"""
query_params = [bigquery.ArrayQueryParameter('col_c_vals', 'STRING', values_in_list)]
job_config = bigquery.QueryJobConfig()
job_config.query_parameters = query_params
query_df = client.query(query, job_config=job_config).to_dataframe()
推荐阅读
- webpack - webpack 命令行选项的正确语法是什么?
- android - 如何从纵向检测导航栏的侧面放置
- c++ - 如何在 C++ 中播放声音?
- pandas - Pandas read_csv,在一列中读取两次
- typescript - npm 从 git 添加远程包并在 npm install 上编译打字稿?
- python - 如何根据元组索引过滤 DataFrame 列?
- wordpress - Wordpress - 标签结果的页面?
- go - 关于 os.Setenv() 和 os.Unsetenv() 引发错误的简单问题
- python - python 中的骰子模拟与无限的可定制骰子?
- php - CURL 在 Red Hat、Apache、PHP、AWS 上的 Web 浏览器中不起作用