Skip to content

Python Pandasでの辞書からデータフレームへの変換

Updated on

データサイエンティストとして、データを扱うことは仕事の中心的な要素の一つです。そのためPythonでこの目的に最もよく利用されるのが辞書(Dictionary)です。辞書は、キーと値のペアのコレクションで、各キーはユニークです。Pandasは、データ解析のための人気のあるPythonライブラリであり、データ操作に強力な機能が備わっています。データ解析では、辞書をPandasのデータフレームに変換することが最も一般的なタスクの一つです。このブログポストでは、辞書をデータフレームに変換するプロセスについて説明します。

Pythonで簡単にデータ可視化を作成したいですか?

PyGWalkerは、Jupyter Notebook型環境でデータ解析と可視化のワークフローをスピードアップするためのオープンソースのPythonプロジェクトです。

PyGWalker (opens in a new tab) は、Pandas Dataframe(または Polars Dataframe)を 視覚的な UIに変換し、変数をドラッグアンドドロップしてグラフを作成することができます。以下のコードを使用してください。

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

今すぐオンラインノートブック上でPyGWalkerを実行できます。

そして、GitHubで ⭐️ を授けることもお忘れなく!

Kaggle Notebook上でPyGWalkerを実行する (opens in a new tab)Google Colab上でPyGWalkerを実行する (opens in a new tab)GitHubでPyGWalkerに ⭐️ を授ける (opens in a new tab)
Run PyGWalker in Kaggle Notebook (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)

辞書とは

Pythonにおいて辞書は、キーと値のペアのコレクションです。各キーはユニークで、値にアクセスするためにキーを使用します。Pythonでは、辞書は中括弧 {} を用いて定義され、階層構造を持つこともできます。

データフレームとは

Pandasにおけるデータフレームとは、2次元の表のようなデータ構造です。行と列から構成され、各列には異なるデータ型のデータが含まれます。データフレームは、データを解析し、操作するために優れた方法です。Pandasは、データフレームでデータを操作するための様々な関数を提供しています。

辞書をデータフレームに変換する

Pandasは、pd.DataFrame.from_dict()関数を使用して、辞書を簡単にデータフレームに変換する方法を提供しています。from_dict()関数は、辞書を入力とし、データフレームを返します。この関数のデフォルトの動作では、辞書内のキーが列名に対応し、値が行データに対応することになります。

例を見てみましょう。生徒の情報、成績、教科に関する情報が含まれる辞書があるとします。

student_data = {'name': ['Alice', 'Bob', 'Charlie'], 'grade': [95, 87, 92], 'subject': ['Math', 'English', 'Science']}

この辞書をDataFrameに変換するには、from_dict()関数を使用するだけです。

import pandas as pd
 
df = pd.DataFrame.from_dict(student_data)
print(df)

このコードスニペットの出力は次のようになります。

       name  grade  subject
0     Alice     95     Math
1       Bob     87  English
2  Charlie     92  Science

辞書のキー (namegrade、およびsubject) が、結果のDataFrameの列名として使用され、対応する値が行データとして使用されたことがわかります。

orientパラメータを使用する

辞書の構造が異なる場合は、結果のDataFrameを作成する方法を指定するために orientパラメータを使用できます。 orientパラメータには、 indexcolumnssplitvaluesなどの複数の値が受け入れられます。デフォルト値は columns です。異なる長さのリストを含む辞書がある場合を考えてみましょう。

data = {'name': ['Alice', 'Bob', 'Charlie'], 'grade': [95, 87], 'subject': ['Math', 'English', 'Science']}

この辞書をデフォルトの動作でDataFrameに変換しようとすると、 ValueErrorが発生します。

df = pd.DataFrame.from_dict(data)
ValueError: arrays must all be same length

このエラーを回避するために、 orientパラメータを使用し、辞書キーが行インデックスに、対応する値が行データになるようなDataFrameを作成できます。

df = pd.DataFrame.from_dict(data, orient='index')
print(df)

このコードスニペットの出力は次のようになります。

            0     1        2
name    Alice   Bob  Charlie
grade      95    87     None
subject  Math  English  Science

辞書のリストを使用する

辞書のリストを使用してDataFrameを作成する別の方法は、リスト内の各辞書が結果のDataFrameの行に対応し、辞書内のキーが列名に対応することです。学生とその成績を表す辞書のリストを使用して例を考えてみましょう。

student_data = [{'name': 'Alice', 'grade': 95, 'subject': 'Math'},
                {'name': 'Bob', 'grade': 87, 'subject': 'English'},
                {'name': 'Charlie', 'grade': 92, 'subject': 'Science'}]

この辞書リストをDataFrameに変換するには、次のようにします。

df = pd.DataFrame(student_data)
print(df)

このコードスニペットの出力は次のようになります。

             name  subject  grade
student1    Alice     Math     95
student2      Bob  English     87
student3  Charlie  Science     92

この辞書のリストをDataFrameに変換するには、単純に pd.DataFrame() 関数を使用します。

df = pd.DataFrame(student_data)
print(df)

このコードの出力は以下のようになります。

       name  grade  subject
0     Alice     95     Math
1       Bob     87  English
2  Charlie     92  Science

DataFrameの結果は前の例で作成されたものと同じであることがわかります。

カラムとしてのキーの使用

from_dict()関数は、デフォルトでは辞書のキーを結果のDataFrameの列名として使用します。別のセットのキーを使用したい場合は、 columns パラメータを使用できます。たとえば、キーが abcの辞書があり、列名として xy 、および z を使用したい場合は、次のように行います。

data = {'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]}
df = pd.DataFrame.from_dict(data, columns=['x', 'y', 'z'])
print(df)

このコードの出力は以下のようになります。

   x  y  z
0  1  4  7
1  2  5  8
2  3  6  9

タイトな方向の使用

from_dict() 関数は、同じキーを持つ辞書がそれぞれの辞書キーに含まれている辞書からDataFrameを作成するためにも使用できます。タイトな方向は、各辞書キーが同じセットのキーを含む辞書を含むことを意味します。次の例を考えてみましょう。

data = {'a': {'x': 1, 'y': 2, 'z': 3}, 'b': {'x': 4, 'y': 5, 'z': 6}, 'c': {'x': 7, 'y': 8, 'z': 9}}

このタイトな方向を持つ辞書からDataFrameを作成するには、 orient パラメータを使用し、その値を index に設定します。

df = pd.DataFrame.from_dict(data, orient='index')
print(df)

このコードの出力は以下のようになります。

   x  y  z
a  1  2  3
b  4  5  6
c  7  8  9

インデックスとカラム名

辞書からDataFrameに変換する際に、インデックスとカラム名を指定することもできます。次の例を考えてみましょう。

data = {'name': ['Alice', 'Bob', 'Charlie'], 'grade': [95, 87, 92], 'subject': ['Math', 'English', 'Science']}
 
df = pd.DataFrame.from_dict(data, orient='columns', columns=['name', 'subject', 'grade'], index=['student1', 'student2', 'student3'])
print(df)

このコードスニペットの出力は以下のようになります:

             name  subject  grade
student1    Alice     Math     95
student2      Bob  English     87
student3  Charlie  Science     92

この例からわかるように、columnsパラメータを使用してカラム名を指定し、indexパラメータを使用してインデックス名を指定できます。

まとめ

このブログポストでは、Pandasのpd.DataFrame.from_dict()関数を使用して辞書を簡単にDataFrameに変換する方法について学びました。辞書の向きを指定し、カラムとインデックス名をカスタマイズする方法についても学びました。辞書を簡単にデータフレームに変換できる能力は、Pythonでデータを操作しやすくし、データサイエンティストがデータ操作や機械学習などの多くのデータ分析タスクを実行することができるようにします。辞書をデータフレームに変換する操作で学んだスキルは、データサイエンスやPythonデータ分析、データ操作といった分野で人気のある別のツールであるR言語にも応用することができます。