DataFrameへの近道!pandas.DataFrame.from_dictの使い方と便利なオプション


pandas.DataFrame.from_dict は、Python の辞書を pandasDataFrame に変換するための関数です。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 comprehensionpd.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)

# 出