この記事では、Python クライアントライブラリ( google-cloud-storage モジュール)を使用して、Cloud Storage に存在する CSV ファイルをデータフレームとして取得する方法を紹介しています。
Python==3.9.7
---
pandas==1.4.1
google-cloud-storage==2.2.1
$ pip install pandas
$ pip install google-cloud-storage
まとめ
from io import BytesIO
import pandas as pd
from google.cloud import storage
# クライアントをインスタンス化
client = storage.Client()
# バケットを取得
# BUCKET_NAMEは、Cloud Storageのバケット名を指定
bucket = client.get_bucket(BUCKET_NAME)
# BLOB(Binary Large OBject)を構成
# FILE_PATHは、オブジェクトのファイルパスを指定
blob = bucket.blob(FILE_PATH)
# オブジェクトのデータを取得
content = blob.download_as_bytes()
# バイナリオブジェクトに変換し、データフレームを作成
df = pd.read_csv(BytesIO(content))
以下、プログラムの解説です。
解説
この章では例として、Cloud Storage に sample-bucket というバケット( Cloud Storage でデータを格納する基本的なコンテナ)が存在し、test1 フォルダの sample_123456.csv というオブジェクトをデータフレームとして取得したいものとします。
sample-bucket
┣ test1/
┃ ┗ sample_123456.csv
┣ test2/
┗ test3/
Col1,Col2,Col3
1,あ,A
2,い,B
3,う,C
クライアントをインスタンス化
google-cloud-storage モジュールを使用して、Python から Cloud Storage を操作するために、クライアントをインスタンス化します。
from google.cloud import storage
# クライアントをインスタンス化
client = storage.Client()
バケットを取得
google.cloud.storage.Client
クラスのget_bucket
メソッドで、バケットをBucket
オブジェクトとして取得します。
from google.cloud import storage
# クライアントをインスタンス化
client = storage.Client()
+ # バケットを取得
+ bucket = client.get_bucket('sample-bucket')
BLOB を構成
google.cloud.storage.Bucket
クラスのblob
メソッドで BLOB( Binary Large OBject )をBlob
オブジェクトとして取得します。
from google.cloud import storage
# クライアントをインスタンス化
client = storage.Client()
# バケットを取得
bucket = client.get_bucket('sample-bucket')
+ # BLOB(Binary Large OBject)を構成
+ blob = bucket.blob('test1/sample_123456.csv')
オブジェクトのデータを取得
google.cloud.storage.Blob
クラスのdownload_as_bytes
メソッドで BLOB の内容を取得します。
from google.cloud import storage
# クライアントをインスタンス化
client = storage.Client()
# バケットを取得
bucket = client.get_bucket('sample-bucket')
# BLOB(Binary Large OBject)を構成
blob = bucket.blob('test1/sample_123456.csv')
+ # オブジェクトのデータを取得
+ content = blob.download_as_bytes()
同じ動作をするdownload_as_string
メソッドはdownload_as_bytes
メソッドの非推奨のエイリアスなので、使わないようにしましょう。
データフレームを作成
pandas モジュールのread_csv
メソッドは、ファイルパスまたはバイナリオブジェクトをもとにデータフレームを作成するので、標準モジュール io のBytesIO
メソッドを使用してバイナリオブジェクトに変換します。
+ from io import BytesIO
+ import pandas as pd
from google.cloud import storage
# クライアントをインスタンス化
client = storage.Client()
# バケットを取得
bucket = client.get_bucket('sample-bucket')
# BLOB(Binary Large OBject)を構成
blob = bucket.blob('test1/sample_123456.csv')
# オブジェクトのデータを取得
content = blob.download_as_bytes()
+ # バイナリオブジェクトに変換し、データフレームを作成
+ df = pd.read_csv(BytesIO(content))

コメント