Python Pandasでの辞書からデータフレームへの変換
Published 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で ⭐️ を授けることもお忘れなく!
辞書とは
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
辞書のキー (name
、grade
、およびsubject
) が、結果のDataFrameの列名として使用され、対応する値が行データとして使用されたことがわかります。
orient
パラメータを使用する
辞書の構造が異なる場合は、結果のDataFrameを作成する方法を指定するために orient
パラメータを使用できます。 orient
パラメータには、 index
、columns
、split
、values
などの複数の値が受け入れられます。デフォルト値は 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
パラメータを使用できます。たとえば、キーが a
、 b
、 c
の辞書があり、列名として x
、 y
、および 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言語にも応用することができます。