在 Python 中使用 BigQuery + Pandas 时无法调用 RowIterator 对象

Posted

技术标签:

【中文标题】在 Python 中使用 BigQuery + Pandas 时无法调用 RowIterator 对象【英文标题】:RowIterator Object Not Callable while using BigQuery + Pandas in Python 【发布时间】:2019-09-24 19:39:48 【问题描述】:

我正在努力将我的 Google BigQuery 数据放入 pandas 数据框中。我能够成功运行以下代码并打印结果集。

from google.cloud import bigquery
from google.oauth2 import service_account
from pandas.io import gbq

credentials = service_account.Credentials.from_service_account_file('My Project Credentials.json')
project_id = 'essential-cairn-253818'
client = bigquery.Client(credentials= credentials,project=project_id)
query = client.query("""
SELECT  device.model as model
FROM     `my-table-name`
LIMIT 100
""")

results = query.result()
for row in results:
  print("".format(row.model))

但是,我想使用 pandas.io.gbq.read_gbq() 功能将其放入数据框中。我添加了下一行代码,但我卡住了。

query2 = """
SELECT  device.model as model
FROM     `my-table-name`
LIMIT 100
"""
results_df = gbq.read_gbq(query2, project_id=project_id, private_key='My Project Credentials.json', dialect = 'standard')

这会产生错误:

TypeError: 'RowIterator' object is not callable

我不确定我哪里出错了。我正在关注这里看到的问题:Live data from BigQuery into a Python DataFrame

谁能指出我正确的方向?

【问题讨论】:

考虑使用pandas-gbq 包。 pandas-gbq.readthedocs.io/en/latest 。您的另一个选择是循环遍历results(正如您所做的那样)并将每一行附加到列表中,然后将列表转换为熊猫 df 【参考方案1】:

我也是新人。

你可以试试 pandas.read_gbq,似乎是更好的选择。 文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_gbq.html

另外,这种其他方法似乎问题较少:How to integrate Bigquery & pandas

【讨论】:

【参考方案2】:

通过关闭 Spyder 并重新启动 Python 已解决此问题...发生了与此查询中的代码无关的事情。很奇怪,但现在可以工作了!

【讨论】:

【参考方案3】:

为什么不用官方的方法query_job.result().to_dataframe()

我的代码是:

results = query_job.result()
df = results.to_dataframe()
df.to_csv('demo1.csv',index=False, encoding='utf-8', sep = ',')

【讨论】:

我建议不要以修辞问题的形式回答,因为它有可能被误解为应该回答的问题。

以上是关于在 Python 中使用 BigQuery + Pandas 时无法调用 RowIterator 对象的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中使用 BigQuery 接收器流式传输管道

如何在 bigquery 中使用 python 将数据添加到 RECORD 类型的列

如何使用python修复在bigquery中上传csv文件

如何使用 Python BigQuery API 追加到 BigQuery 中的表

在 Python 中使用 BigQuery + Pandas 时无法调用 RowIterator 对象

在 Python 中运行 BigQuery SQL 查询,如何进行身份验证?