辞書のリストから Pandas のデータフレームを作成する
Luqman Khan
2022年4月14日
ディクショナリは、個別の Key-Value マップを格納するコンパクトで柔軟な Python コンテナです。辞書は中括弧({}
)で記述されます。これには、コンマで区切られたキーワードのペアが含まれます(、)
および:
各キーをその値から区切ります。
ダイスゲームの例を含む 3つの辞書を以下に示します。
ダイスゲームの例を見てみましょう。この場合、2 人のプレーヤーが 6つのサイコロを振り、対応するプレーヤーと一緒にサイコロを振ります。
import pandas as pd
from numpy.random import randint
# create datset from multiple dictionaries
dataset_list = [
{"Harry": 1, "Josh": 3, "dices": "first dice"},
{"Harry": 5, "Josh": 1, "dices": "second dice"},
{"Harry": 6, "Josh": 2, "dices": "third dice"},
{"Harry": 2, "Josh": 3, "dices": "fourth dice"},
{"Harry": 6, "Josh": 6, "dices": "fifth dice"},
{"Harry": 4, "Josh": 3, "dices": "sixth dice"},
]
df = pd.DataFrame(dataset_list)
print(df)
print()
harry = []
josh = []
for i in range(6):
harry.append(randint(1, 7))
josh.append(randint(1, 7))
データフレーム
がキーと値のペアをとることがわかっているため、辞書を含むアイテムのリストからデータセットを作成しました。これが辞書で適切である理由です。
出力:
Harry Josh dices
0 1 3 first dice
1 5 1 second dice
2 6 2 third dice
3 2 3 fourth dice
4 6 6 fifth dice
5 4 3 sixth dice
最後の例では、サイコロを手動で設定しました。ここでは、numpy
ライブラリで定義されている randint
メソッドを使用します。次の行に、harry
と josh
という名前の 2つの空白のリストを作成しました。次に、for
ループを作成しました。この範囲は 0〜6 で定義され、append()
メソッドを使用して要素として 2つの定義済みリストに乱数を追加します。以下を参照してください。
import pandas as pd
from numpy.random import randint
print()
harry = []
josh = []
for i in range(6):
harry.append(randint(1, 7))
josh.append(randint(1, 7))
# create datset from multiple dictionaries
dataset_list = [
{"Harry": harry[0], "Josh": josh[0], "dices": "first dice"},
{"Harry": harry[1], "Josh": josh[1], "dices": "second dice"},
{"Harry": harry[2], "Josh": josh[2], "dices": "third dice"},
{"Harry": harry[3], "Josh": josh[3], "dices": "fourth dice"},
{"Harry": harry[4], "Josh": josh[4], "dices": "fifth dice"},
{"Harry": harry[5], "Josh": josh[5], "dices": "sixth dice"},
]
df = pd.DataFrame(dataset_list)
print(df)
randint()
の範囲は、指定された 1 から n-1
、またはデフォルトではゼロから n-1
であるため、1-7
の範囲を定義しました。
出力
Harry Josh dices
0 4 1 first dice
1 4 2 second dice
2 3 4 third dice
3 1 1 fourth dice
4 4 5 fifth dice
5 4 4 sixth dice
ここで、for
ループを使用してコード行を減らし、辞書全体をリストに追加しました。さらに、index
という名前のリストにインデックスを追加すると、プレーヤーの順番に対応し、DataFrame
のインデックスとして設定されます。
import pandas as pd
from numpy.random import randint
dataset_list = []
index = []
for i in range(1, 7):
dataset_list.append({"Harry": randint(1, 7), "Josh": randint(1, 7)})
index.append("dice " + str(i))
print("\nAfter reducing the code\n")
df = pd.DataFrame(dataset_list, index=index)
print(df)
出力:
Harry Josh
dice 1 2 4
dice 2 2 3
dice 3 6 5
dice 4 5 2
dice 5 4 2
dice 6 1 1
すべての例:
import pandas as pd
from numpy.random import randint
# create datset from multiple dictionaries
dataset_list = [
{"Harry": 1, "Josh": 3, "dices": "first dice"},
{"Harry": 5, "Josh": 1, "dices": "second dice"},
{"Harry": 6, "Josh": 2, "dices": "third dice"},
{"Harry": 2, "Josh": 3, "dices": "fourth dice"},
{"Harry": 6, "Josh": 6, "dices": "fifth dice"},
{"Harry": 4, "Josh": 3, "dices": "sixth dice"},
]
df = pd.DataFrame(dataset_list)
print(df)
print()
harry = []
josh = []
for i in range(6):
harry.append(randint(1, 7))
josh.append(randint(1, 7))
# create datset from multiple dictionaries
dataset_list = [
{"Harry": harry[0], "Josh": josh[0], "dices": "first dice"},
{"Harry": harry[1], "Josh": josh[1], "dices": "second dice"},
{"Harry": harry[2], "Josh": josh[2], "dices": "third dice"},
{"Harry": harry[3], "Josh": josh[3], "dices": "fourth dice"},
{"Harry": harry[4], "Josh": josh[4], "dices": "fifth dice"},
{"Harry": harry[5], "Josh": josh[5], "dices": "sixth dice"},
]
df = pd.DataFrame(dataset_list)
print(df)
dataset_list = []
index = []
for i in range(1, 7):
dataset_list.append({"Harry": randint(1, 7), "Josh": randint(1, 7)})
index.append("dice " + str(i))
print("\nAfter reducing the code\n")
df = pd.DataFrame(dataset_list, index=index)
print(df)
出力:
Harry Josh dices
0 1 3 first dice
1 5 1 second dice
2 6 2 third dice
3 2 3 fourth dice
4 6 6 fifth dice
5 4 3 sixth dice
Harry Josh dices
0 4 1 first dice
1 4 2 second dice
2 3 4 third dice
3 1 1 fourth dice
4 4 5 fifth dice
5 4 4 sixth dice
After reducing the code
Harry Josh
dice 1 2 4
dice 2 2 3
dice 3 6 5
dice 4 5 2
dice 5 4 2
dice 6 1 1