辞書のリストから 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