BigQueryに存在するテーブルをDataFrameとして取得する方法を解説しています.
公式 Reference: pandas.read_gbq
前提条件
本記事で記載しているコードを実行するにはpandas
やread_gbq
などのライブラリがインストールされている必要があります.
BigQueryからDataFrameを取得する
pandasのread_gbq
メソッドを使用して以下のように取得できます.
import pandas as pd
# BigQueryのパブリックデータ(67.58 KB)
query = '''
SELECT
County_of_Residence,
Births,
Ave_Age_of_Mother
FROM
`bigquery-public-data.sdoh_cdc_wonder_natality.county_natality`
LIMIT
10
'''
df = pd.read_gbq(query)
display(df.head(3))
print(df.shape)
County_of_Residence | Births | Ave_Age_of_Mother | |
---|---|---|---|
0 | Calhoun County, AL | 1265 | 26.67 |
1 | Tulsa County, OK | 8933 | 28.13 |
2 | Carroll County, GA | 1540 | 27.20 |
(10, 3)
テーブルからデータを取得するためのクエリを用意し,それをメソッドに渡せばOKです.
注意
BigQueryは実行した操作に応じて料金がかかるため,クエリを変更する際などは注意してください.1
メソッドの主な引数
read_gbq
メソッドには主に以下の引数があります.
引数 | データ型 | 説明 |
project_id |
str | アカウントのプロジェクトIDを指定. 省略時はデフォルトのプロジェクトIDが指定される. |
index_col |
str | DataFrameのindexに指定するカラムを指定. |
col_order |
list or str | DataFrameのカラム順序を指定. |
dialect |
str |
以下のいずれかを指定可能.
dialect='legacy'
|
use_bqstorage_api |
bool | BigQuery Storage API client を使用して結果を高速に取得できる. |
progress_bar_type |
str | tqdm package のプログレスバーを表示できる. |
使用例:インデックス指定とカラム順序の指定
以下はindex_col
とcol_order
を指定した例です.
df = pd.read_gbq(query, index_col='County_of_Residence', col_order=['Ave_Age_of_Mother', 'Births'])
df.head(3)
Ave_Age_of_Mother | Births | |
---|---|---|
County_of_Residence | ||
Calhoun County, AL | 26.67 | 1265 |
Tulsa County, OK | 28.13 | 8933 |
Carroll County, GA | 27.20 | 1540 |
index_col
で指定したカラムがDataFrameのindexになりcol_order
で指定した順序でカラムが表示されています.
参考
col_order
は取得するカラムをすべて指定しないとエラーになります.
また,可能ならクエリ側でカラム順序を指定した方がシンプルです.
使用例:高速化とプログレスバー表示
テーブルを高速に取得するにはuse_bqstorage_api
を使用します.
また,以下ではテーブル取得の進捗状況を表示できるprogress_bar_type
も併せて指定しています.
df = pd.read_gbq(query, use_bqstorage_api=True, progress_bar_type='tqdm')
df.head(3)
Downloading: 100%|██████████|
County_of_Residence | Births | Ave_Age_of_Mother | |
---|---|---|---|
0 | Calhoun County, AL | 1265 | 26.67 |
1 | Tulsa County, OK | 8933 | 28.13 |
2 | Carroll County, GA | 1540 | 27.20 |
上記で取得しているテーブルは非常に小さいのでuse_bqstorage_api
を指定しなくてもストレスなくデータを取得できますが,大きいテーブルを取得する際は指定をおすすめします.2
ひとこと
BigQueryからテーブルをDataFrameとして取得してあれこれする場合にはread_gbq
が便利に使えますね.
テーブルのスキーマなどの情報を得たい場合は以下の記事もご覧ください.