AWSのNoSQLデータベースサービスの「DynamoDB」ですが、scanやquery関数を用いてDynamoDBから取得した値を使う場合、decimalの対応や入れ子になっているデータ等の対応が少し面倒です。
しかし、DynamoDBから取得した値をPythonのデータ解析ライブラリ「pandas」のデータフレーム形式に変換することで、その後の処理がやりやすくなったので共有します。
目次
pandasデータフレームへの変換は「pandas.io.json.json_normalize」
DynamoDBから取得した値をpandasのデータフレームへ変換するためには「pandas.io.json.json_normalize」という関数を使います。
pandas.io.json.json_normalizeはデータをpandasデータフレームに変換する関数ですが、次の特徴を持ちます。
- 変換元データはJSONに変換できる形式である必要がある
- 入れ子になっているデータに対して特に効果的
DynamoDBからscanやquery関数で取得できる値もJSONに変換できる形式なので、pandas.io.json.json_normalizeを使うことでpandasデータフレームに変換することができます。
実際にDynamoDBの値をpandasデータフレームに変換する
それでは実際にDynamoDBの値を取得して、そのまま使う場合とデータフレームに変換する場合を比較します。
準備としてDynamoDBに次のような値を入れておきます。取得した値が入れ子構造になるように、”map”というキーの値をMap型(辞書型)にしています。
結果が以下です。
DynamoDBの値をscan関数で取得したままの状態に比べて、pandasデータフレームにすることで、その後の処理が簡単になります。
特にDynamoDBの値を集計する場合や、フィルタリングする場合などにfor文を書かなくて良いというメリットがあります。また、DynamoDBから取得した値を文字列にする場合でも、一旦pandasデータフレームに変換することでdecimalの値を気にすることなく文字列に変換することができるのも利点です。
DynamoDBの値はpandasデータフレームに変換するのがおすすめ
今回はDynamoDBから取得した値をpandasデータフレームに変換するとその後の処理がやりやすいということを共有しました。
ぜひぜひ皆さんもDynamoDBの値を集計する場合などに試してみてください〜。
コメントを残す