Pandas の DataFrame を辞書に変換
-
Pandas の DataFrame を辞書に変換する
to_dict()
関数 -
Pandas の DataFrame から辞書への値のリストまたは
Series
の変換 - Pandas の DataFrame を辞書のリストに変換する
- Pandas の DataFrame から行ごとに辞書への出力
-
key
として 1つの列を持つ辞書への DataFrame -
dict()
とzip()
関数を用いた Pandas DataFrame から辞書への出力
このチュートリアルでは、インデックス列の要素をキー、他の列の対応する要素を値として、Pandas DataFrame を辞書に変換する方法を紹介します。記事では以下の DataFrame を使用します。
import pandas as pd
df = pd.DataFrame(
[["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
columns=["Name", "Age", "Course"],
)
print(df)
出力:
Name Age Course
0 Jay 16 BBA
1 Jack 19 BTech
2 Mark 18 BSc
Pandas の DataFrame を辞書に変換する to_dict()
関数
Pandas の to_dict()
関数は DataFrame を辞書に変換します。パラメータは辞書の形式と、キーと値のペアの関連付け方法を決定します。以下に、to_dict()
を使って DataFrame を辞書に変換する初歩的な例を示します。
import pandas as pd
df = pd.DataFrame(
[["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
columns=["Name", "Age", "Course"],
)
d1 = df.to_dict()
print(d1)
出力:
{'Name': {0: 'Jay', 1: 'Jack', 2: 'Mark'}, 'Age': {0: 16, 1: 19, 2: 18}, 'Course': {0: 'BBA', 1: 'BTech', 2: 'BSc'}}
出力を見るとわかるように、カラム名はキーに変換され、各レコードはインデックスをキーとした値に変換されます。
Pandas の DataFrame から辞書への値のリストまたは Series
の変換
関数 to_dict()
に list
、records
、series
、index
、split
、dict
などのパラメータを渡すことで、最終的な辞書の形式を変更することができます。例えば、list
と series
をパラメータとして渡すと、カラム名がキーとなりますが、値のペアはそれぞれリストと行の系列に変換されます。次の例はこれを示しています。
import pandas as pd
df = pd.DataFrame(
[["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
columns=["Name", "Age", "Course"],
)
d_list = df.to_dict("list")
print(d_list)
d_series = df.to_dict("series")
print(d_series)
出力:
{'Name': ['Jay', 'Jack', 'Mark'], 'Age': [16, 19, 18], 'Course': ['BBA', 'BTech', 'BSc']}
{'Name': 0 Jay
1 Jack
2 Mark
Name: Name, dtype: object, 'Age': 0 16
1 19
2 18
Name: Age, dtype: int64, 'Course': 0 BBA
1 BTech
2 BSc
Name: Course, dtype: object}
Pandas の DataFrame を辞書のリストに変換する
また、関数に records
を渡すことで、各行を個別の辞書として扱うこともできます。最終的な結果は、各行を辞書として持つリストとなります。例えば、
import pandas as pd
df = pd.DataFrame(
[["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
columns=["Name", "Age", "Course"],
)
d_records = df.to_dict("records")
print(d_records)
出力:
[{'Name': 'Jay', 'Age': 16, 'Course': 'BBA'}, {'Name': 'Jack', 'Age': 19, 'Course': 'BTech'}, {'Name': 'Mark', 'Age': 18, 'Course': 'BSc'}]
Pandas の DataFrame から行ごとに辞書への出力
しかし、多くの場合、カラム名を辞書のキーにしたくない場合があります。そのような場合は、index
を渡すことで DataFrame のインデックスをキーにすることができます。以下のコードスニペットがそれを示しています。
import pandas as pd
df = pd.DataFrame(
[["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
columns=["Name", "Age", "Course"],
)
d_index = df.to_dict("index")
print(d_index)
出力:
{0: {'Name': 'Jay', 'Age': 16, 'Course': 'BBA'}, 1: {'Name': 'Jack', 'Age': 19, 'Course': 'BTech'}, 2: {'Name': 'Mark', 'Age': 18, 'Course': 'BSc'}}
key
として 1つの列を持つ辞書への DataFrame
しかし、ある列の要素をキーとし、他の列の要素を値としたい場合はどうでしょうか?これは、必要なカラムを DataFrame のインデックスにして、.T()
関数を使って転置を取るだけで可能です。
例
import pandas as pd
df = pd.DataFrame(
[["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
columns=["Name", "Age", "Course"],
)
d_names = df.set_index("Name").T.to_dict("list")
print(d_names)
出力:
{'Jay': [16, 'BBA'], 'Jack': [19, 'BTech'], 'Mark': [18, 'BSc']}
dict()
と zip()
関数を用いた Pandas DataFrame から辞書への出力
Python の dict()
関数は Pandas DataFrame を辞書に変換することもできます。また、並列イテレータを作成するために、個々の列を引数として zip()
関数を使用しなければなりません。そうすれば、zip()
関数は各イテレータで 1つの行にあるすべての値を返してくれます。
import pandas as pd
df = pd.DataFrame(
[["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
columns=["Name", "Age", "Course"],
)
d = dict([(i, [a, b]) for i, a, b in zip(df["Name"], df["Age"], df["Course"])])
print(d)
出力:
{'Jay': [16, 'BBA'], 'Jack': [19, 'BTech'], 'Mark': [18, 'BSc']}
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn