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

Python 如果列表中存在另一列,则根据另一列的值选择列,python,pandas,google-bigquery,Python,Pandas,Google Bigquery,我正在尝试使用pandas从Bigquery中的表中选择A列和B列。如果列表中有C列的值,请根据C列的值读取\u gbq。但是,当我使用格式在查询字符串中插入列表时,列表的内容被[]方括号包围。这打破了我的疑问 我在查询字符串上使用了replace,手动删除方括号 values_in_list = ['a', 'b', 'c'] query = """ SELECT column_A, column_B FROM my_table WHERE column_C IN ({})

我正在尝试使用
pandas从Bigquery中的表中选择A列和B列。如果列表中有C列的值,请根据C列的值读取\u gbq
。但是,当我使用
格式
在查询字符串中插入列表时,列表的内容被
[]
方括号包围。这打破了我的疑问

我在查询字符串上使用了
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\u gbq
支持
query\u config
关键字arg中的
ArrayQueryParameters
。以下是我的解决方法:

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()

最好通过查询参数传递列表中的值,请参见此。非常感谢您的回复。我跟踪了你提供的链接。当我使用
'type':'STRING'
parametertype
时,此查询仅返回与列表的第一个元素类似的值。当我尝试
'type':'ARRAY'
时,它基于
GenericGBQException
返回了一个
BadRequest