[英]Unpacking a nested dictionary to a pandas DataFrame
我的字典目前是這樣設置的:
{'0001': {'Batting Hours': [79, 154, 50, 172],
'Bowling Hours': [101, 82, 298],
'Date': ['02/02/2019', '02/01/2019', '02/04/2019', '02/03/2019']},
'0002': {'Batting Hours': [7, 23, 40],
'Bowling Hours': [14, 30, 43],
'Date': ['02/04/2019', '02/01/2019', '02/02/2019']}}
我如何解開這個字典,以便數據幀有這樣的輸出:
Code Date Batting Hours Bowling Hours
0001 02/02/2019 79 101
0001 02/01/2019 154 82
我嘗試查看有關如何解開其他類似數據結構的文檔,但我似乎無法理解我的。
我目前正在將這些值附加到這樣的列表中
player_agg_hours_dict[Player]['Batting Hours'].append(aggregate_batting_hours)
我正在嘗試輸出到這樣的數據幀:
output_df = pd.DataFrame.from_dict(player_agg_hours_dict, orient='index').transpose() # convert dict to dataframe
而且我知道from_dict()
參數必須有所不同。
一種方法是結合使用stack
和unstack
:
v = pd.DataFrame(dct).stack()
(pd.DataFrame(v.tolist(), index=v.index)
.stack()
.unstack(0)
.reset_index(level=1, drop=True)
.rename_axis('Code')
.reset_index())
Code Batting Hours Bowling Hours Date
0 0001 79 101 02/02/2019
1 0001 154 82 02/01/2019
2 0001 50 298 02/04/2019
3 0001 172 NaN 02/03/2019
4 0002 7 14 02/04/2019
5 0002 23 30 02/01/2019
6 0002 40 43 02/02/2019
您也可以通過從concat
開始一步完成此操作:
(pd.concat({k: pd.DataFrame.from_dict(v, orient='index') for k,v in dct.items()})
.stack()
.unstack(1)
.reset_index(level=1, drop=True)
.rename_axis('Code')
.reset_index())
Code Date Batting Hours Bowling Hours
0 0001 02/02/2019 79 101
1 0001 02/01/2019 154 82
2 0001 02/04/2019 50 298
3 0001 02/03/2019 172 NaN
4 0002 02/04/2019 7 14
5 0002 02/01/2019 23 30
6 0002 02/02/2019 40 43
您可以將pd.concat
與生成器表達式一起使用。 這假設輸入字典dct
和您的列表,對於任何給定的Code
,都是相同的長度。
df = pd.concat((pd.DataFrame({**{'Code': key}, **value}) \
for key, value in dct.items()), ignore_index=True)
print(df)
Batting Hours Bowling Hours Code Date
0 79 101 0001 02/02/2019
1 154 82 0001 02/01/2019
2 50 298 0001 02/04/2019
3 172 100 0001 02/03/2019
4 7 14 0002 02/04/2019
5 23 30 0002 02/01/2019
6 40 43 0002 02/02/2019
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.