在 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 API 追加到 BigQuery 中的表