如何将字典词典展开为大词典的pandas DataFrame?

时间:2018-11-22 01:58:44

标签: python python-3.x pandas dictionary dataframe

在python3.x中考虑以下字典词典

dict1 = {4: {4:25, 5:39, 3:42}, 5:{24:94, 252:49, 25:4, 55:923}}

我想将其展开为pandas DataFrame。似乎有两个选择:

df1 = pd.DataFrame.from_dict(dict1, orient='columns')

print(df1)
        4      5
3    42.0    NaN
4    25.0    NaN
5    39.0    NaN
24    NaN   94.0
25    NaN    4.0
55    NaN  923.0
252   NaN   49.0

其中的列是主字典键4和'5',行索引是子字典键,值是子字典值。

另一个选项是

df2 = pd.DataFrame.from_dict(dict1, orient='index')
print(df2)
    4     5     3     24    252  25     55 
4  25.0  39.0  42.0   NaN   NaN  NaN    NaN
5   NaN   NaN   NaN  94.0  49.0  4.0  923.0

其中,列是内部“子词典”的键,行索引是主词典的键,值是子词典的键。

有没有一种标准的方法可以让我们按照以下方式展开python字典?

key inner_key values
4        3      42 
4        4      25
4        5      39
5        24     94
5        25     4
5        55     923
5        252    49

最好不要在使用from_dict()之后再操作DataFrame,因为对于更大的python字典,这可能会占用大量内存。

2 个答案:

答案 0 :(得分:2)

列表理解

列表理解应该相当有效:

time.Duration

pd.melt + dropna

如果您不介意从dict1 = {4: {4:25, 5:39, 3:42}, 5: {24:94, 252:49, 25:4, 55:923}} cols = ['key', 'inner_key', 'values'] df = pd.DataFrame([[k1, k2, v2] for k1, v1 in dict1.items() for k2, v2 in v1.items()], columns=cols).sort_values(cols) print(df) key inner_key values 2 4 3 42 0 4 4 25 1 4 5 39 3 5 24 94 5 5 25 4 6 5 55 923 4 5 252 49 开始工作,则可以通过df1取消数据框的位置,然后删除具有空pd.melt的行。

value

答案 1 :(得分:1)

pd.DataFrame([[i,j,user_dict[i][j] ] for i in user_dict.keys() for j in user_dict[i].keys()],columns=['key', 'inner_key', 'values'])

输出:

   key  inner_key   values
0   4   4           25
1   4   5           39
2   4   3           42
3   5   24          94
4   5   252         49
5   5   25          4
6   5   55         923