如果列表中存在,则根据另一列的值选择列

时间:2019-04-03 18:46:29

标签: python pandas google-bigquery

我正在尝试根据列表中的C列值,使用pandas.read_gbq从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')

这可以完成工作。我想知道是否有比强行强制解决方案更优雅的解决方案。

1 个答案:

答案 0 :(得分:1)

我不确定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()