使用外键作为 df 索引和内键列 headers 从嵌套字典创建 pandas 数据框
Create pandas dataframe from nested dict with outer keys as df index and inner keys column headers
我有一个像下面这样的嵌套字典
dictA = {X:{A: 0.2, B:0.3, C:0.4} ,Y:{A: 0.05, B:0.8, C:0.1},Z:{A: 0.15, B:0.6, C:0.25}}
我想创建一个数据框,其中第一个键对应于索引,嵌套字典的键是列 headers。例如,
A B C
X 0.2 0.3 0.4
Y 0.05 0.8 0.1
Z 0.15 0.6 0.25
我知道我可以从外部字典中提取键到列表中(使用列表理解):
index_list = [key for key in dictA.iterkeys()]
然后将嵌套字典合并为一个字典:
dict_list = [value for value in dictA.itervalues()]
final_dict = {k: v for dict in dict_list for k, v in dict.items()}
我终于可以通过以下方式创建我的 df
:
df = pd.DataFrame(final_dict, index = index_list)
问题是我需要将正确的值映射回正确的索引,这在普通字典发生变化时很困难。
我想有一种与我上面建议的完全不同且更有效的方法,请帮忙?
您可以简单地将 dictA
转换为 DataFrame,然后进行转置,使列成为索引,索引成为列。例子-
df = pd.DataFrame(dictA).T
演示 -
In [182]: dictA = {'X':{'A': 0.2, 'B':0.3, 'C':0.4} ,'Y':{'A': 0.05, 'B':0.8, 'C':0.1},'Z':{'A': 0.15, 'B':0.6, 'C':0.25}}
In [183]: df = pd.DataFrame(dictA).T
In [184]: df
Out[184]:
A B C
X 0.20 0.3 0.40
Y 0.05 0.8 0.10
Z 0.15 0.6 0.25
使用from_dict
并传递orient='index'
它被设计用来处理这种形式的字典:
In [350]:
pd.DataFrame.from_dict(dictA, orient='index')
Out[350]:
A C B
X 0.20 0.40 0.3
Y 0.05 0.10 0.8
Z 0.15 0.25 0.6
我有一个像下面这样的嵌套字典
dictA = {X:{A: 0.2, B:0.3, C:0.4} ,Y:{A: 0.05, B:0.8, C:0.1},Z:{A: 0.15, B:0.6, C:0.25}}
我想创建一个数据框,其中第一个键对应于索引,嵌套字典的键是列 headers。例如,
A B C
X 0.2 0.3 0.4
Y 0.05 0.8 0.1
Z 0.15 0.6 0.25
我知道我可以从外部字典中提取键到列表中(使用列表理解):
index_list = [key for key in dictA.iterkeys()]
然后将嵌套字典合并为一个字典:
dict_list = [value for value in dictA.itervalues()]
final_dict = {k: v for dict in dict_list for k, v in dict.items()}
我终于可以通过以下方式创建我的 df
:
df = pd.DataFrame(final_dict, index = index_list)
问题是我需要将正确的值映射回正确的索引,这在普通字典发生变化时很困难。
我想有一种与我上面建议的完全不同且更有效的方法,请帮忙?
您可以简单地将 dictA
转换为 DataFrame,然后进行转置,使列成为索引,索引成为列。例子-
df = pd.DataFrame(dictA).T
演示 -
In [182]: dictA = {'X':{'A': 0.2, 'B':0.3, 'C':0.4} ,'Y':{'A': 0.05, 'B':0.8, 'C':0.1},'Z':{'A': 0.15, 'B':0.6, 'C':0.25}}
In [183]: df = pd.DataFrame(dictA).T
In [184]: df
Out[184]:
A B C
X 0.20 0.3 0.40
Y 0.05 0.8 0.10
Z 0.15 0.6 0.25
使用from_dict
并传递orient='index'
它被设计用来处理这种形式的字典:
In [350]:
pd.DataFrame.from_dict(dictA, orient='index')
Out[350]:
A C B
X 0.20 0.40 0.3
Y 0.05 0.10 0.8
Z 0.15 0.25 0.6