DataFrameへの近道!pandas.DataFrame.from_dictの使い方と便利なオプション
pandas.DataFrame.from_dict
は、Python の辞書を pandas
の DataFrame
に変換するための関数です。DataFrame
は、行と列で構成される表形式のデータ構造で、データ分析や可視化に広く利用されています。
使い方
import pandas as pd
# 辞書を作成
data = {'名前': ['田中太郎', '佐藤花子', '鈴木一郎'],
'年齢': [30, 25, 22],
'出身地': ['東京都', '大阪府', '愛知県']}
# 辞書をDataFrameに変換
df = pd.DataFrame.from_dict(data)
# 結果
print(df)
# 出力
名前 年齢 出身地
0 田中太郎 30 東京都
1 佐藤花子 25 大阪府
2 鈴木一郎 22 愛知県
オプション
pandas.DataFrame.from_dict
には、いくつかのオプションが用意されています。
columns
:orient='index'
の場合に、列名を設定します。dtype
: 各列のデータ型を指定します。orient
: データの方向を指定します。デフォルトは 'columns' で、辞書のキーが列名になります。'index' を指定すると、キーがインデックスになります。
例
- 列名を変更する
df = pd.DataFrame.from_dict(data, orient='index', columns=['氏名', '歳', '住まい'])
print(df)
- 各列のデータ型を指定する
df = pd.DataFrame.from_dict(data, dtype={'年齢': int, '出身地': str})
print(df.dtypes)
利点
- 複数の辞書を結合して
DataFrame
を作成できる - 列名やデータ型を自由に設定できる
- 辞書を簡単に
DataFrame
に変換できる
- 辞書の値は、同じ長さのリストである必要がある
- 辞書のキーは一意である必要がある
複数の辞書を結合する
複数の辞書を結合して、1つの DataFrame
を作成することができます。
import pandas as pd
# 辞書を作成
data1 = {'名前': ['田中太郎', '佐藤花子'],
'年齢': [30, 25]}
data2 = {'出身地': ['東京都', '大阪府']}
# 辞書をDataFrameに変換
df = pd.DataFrame.from_dict([data1, data2], orient='index')
print(df)
# 出力
名前 年齢 出身地
0 田中太郎 30 東京都
1 佐藤花子 25 大阪府
階層化された辞書を処理する
階層化された辞書を処理することもできます。
import pandas as pd
# 辞書を作成
data = {'東京': {'男性': [30, 25], '女性': [22, 20]},
'大阪': {'男性': [28, 26], '女性': [23, 21]}}
# 辞書をDataFrameに変換
df = pd.DataFrame.from_dict(data, orient='index')
print(df)
# 出力
男性 女性
東京 30 22
25 20
大阪 28 23
26 21
カスタマイズされた列名を使用する
列名を自由に設定することができます。
import pandas as pd
# 辞書を作成
data = {'名前': ['田中太郎', '佐藤花子', '鈴木一郎'],
'年齢': [30, 25, 22],
'出身地': ['東京都', '大阪府', '愛知県']}
# 列名を変更してDataFrameに変換
df = pd.DataFrame.from_dict(data, columns=['氏名', '年齢', '住所'])
print(df)
# 出力
氏名 年齢 住所
0 田中太郎 30 東京都
1 佐藤花子 25 大阪府
2 鈴木一郎 22 愛知県
各列のデータ型を個別に指定することができます。
import pandas as pd
# 辞書を作成
data = {'名前': ['田中太郎', '佐藤花子', '鈴木一郎'],
'年齢': [30, 25, 22],
'出身地': ['東京都', '大阪府', '愛知県']}
# 各列のデータ型を指定してDataFrameに変換
df = pd.DataFrame.from_dict(data, dtype={'年齢': int, '出身地': str})
print(df.dtypes)
# 出力
名前 object
年齢 int32
出身地 object
dtype: object
pandas.DataFrame コンストラクタを使用する
pandas.DataFrame
コンストラクタは、さまざまなデータ構造から DataFrame
を作成することができます。辞書以外にも、リスト、NumPy 配列、他の DataFrame
オブジェクトなどを渡すことができます。
import pandas as pd
# 辞書を作成
data = {'名前': ['田中太郎', '佐藤花子', '鈴木一郎'],
'年齢': [30, 25, 22],
'出身地': ['東京都', '大阪府', '愛知県']}
# DataFrameコンストラクタを使用してDataFrameを作成
df = pd.DataFrame(data)
print(df)
# 出力
名前 年齢 出身地
0 田中太郎 30 東京都
1 佐藤花子 25 大阪府
2 鈴木一郎 22 愛知県
pd.Series.from_dict と pd.concat を使用する
まず、各キーを Series
に変換し、その後 pd.concat
を使用して結合することができます。
import pandas as pd
# 辞書を作成
data = {'名前': ['田中太郎', '佐藤花子', '鈴木一郎'],
'年齢': [30, 25, 22],
'出身地': ['東京都', '大阪府', '愛知県']}
# 各キーをSeriesに変換
df = pd.concat([pd.Series(d) for d in data.values()], axis=1, columns=data.keys())
print(df)
# 出力
名前 年齢 出身地
0 田中太郎 30 東京都
1 佐藤花子 25 大阪府
2 鈴木一郎 22 愛知県
リスト内包表記を使用する
リスト内包表記を使用して、辞書のキーと値を直接 DataFrame
に格納することができます。
import pandas as pd
# 辞書を作成
data = {'名前': ['田中太郎', '佐藤花子', '鈴木一郎'],
'年齢': [30, 25, 22],
'出身地': ['東京都', '大阪府', '愛知県']}
# リスト内包表記を使用してDataFrameを作成
df = pd.DataFrame([[name, age, address] for name, age, address in data.values()],
columns=['名前', '年齢', '出身地'])
print(df)
# 出力
名前 年齢 出身地
0 田中太郎 30 東京都
1 佐藤花子 25 大阪府
2 鈴木一郎 22 愛知県
dict comprehension と pd.DataFrame を使用する
dict comprehension
と pd.DataFrame
を組み合わせて、辞書のキーと値を DataFrame
に格納することができます。
import pandas as pd
# 辞書を作成
data = {'名前': ['田中太郎', '佐藤花子', '鈴木一郎'],
'年齢': [30, 25, 22],
'出身地': ['東京都', '大阪府', '愛知県']}
# dict comprehensionとpd.DataFrameを使用してDataFrameを作成
df = pd.DataFrame({col: [row[col] for row in data.values()] for col in data.keys()})
print(df)
# 出力
名前 年齢 出身地
0 田中太郎 30 東京都
1 佐藤花子 25 大阪府
2 鈴木一郎 22 愛知県
numpy.array と pd.DataFrame を使用する
numpy.array
を使用して辞書の値を NumPy 配列
に変換し、その後 pd.DataFrame
を使用して DataFrame
に変換することができます。
import pandas as pd
import numpy as np
# 辞書を作成
data = {'名前': ['田中太郎', '佐藤花子', '鈴木一郎'],
'年齢': [30, 25, 22],
'出身地': ['東京都', '大阪府', '愛知県']}
# 辞書の値をNumPy配列に変換
data_array = np.array([list(d.values()) for d in data.values()])
# NumPy配列をDataFrameに変換
df = pd.DataFrame(data_array, columns=data.keys())
print(df)
# 出