my_dict = { 'company_a': [],
'company_b': [ {'gender': 'Male',
'investor': True,
'name': 'xyz',
'title': 'Board Member'} ],
'company_c': [],
'company_m': [ {'gender': 'Male',
'investor': None,
'name': 'abc',
'title': 'Advisor'},
{'gender': 'Male',
'investor': None,
'name': 'opq',
'title': 'Advisor'} ],
'company_x': [],
'company_y': [] }
如何将上述Python字典转换为包含以下列的Pandas数据帧:company, gender, investor, name, title
列company
将由my_dict
的顶级键填充。其他列将填充数组中字典中的值。
我已经尝试了pd.DataFrame.from_dict(my_dict, orient='index')
,但它没有给我我想要的东西。
答案 0 :(得分:3)
此版本使用None
填充所有缺失值:
data = {'company': [], 'gender': [], 'investor': [], 'name': [], 'title': []}
for k, v in my_dict.items():
for entry in v:
data['company'].append(k)
if not v:
data['company'].append(k)
for name in ['gender', 'investor', 'name', 'title']:
has_entry = False
for entry in v:
has_entry = True
data[name].append(entry.get(name))
if not has_entry:
data[name].append(None)
df = pd.DataFrame(data)
print(df)
输出:
company gender investor name title
0 company_a None None None None
1 company_y None None None None
2 company_b Male True xyz Board Member
3 company_c None None None None
4 company_x None None None None
5 company_m Male None abc Advisor
6 company_m Male None opq Advisor
您还可以将所有None
替换为NaN
:
print(df.fillna(np.nan))
输出:
company gender investor name title
0 company_a NaN NaN NaN NaN
1 company_y NaN NaN NaN NaN
2 company_b Male True xyz Board Member
3 company_c NaN NaN NaN NaN
4 company_x NaN NaN NaN NaN
5 company_m Male NaN abc Advisor
6 company_m Male NaN opq Advisor
答案 1 :(得分:0)
有点混乱,但这很灵活,具体取决于嵌套词典中的属性,并将公司放在他们自己的专栏中。
df = pd.DataFrame(columns = ['company'])
i = 0
for company in my_dict:
for nested_dict in my_dict[company]:
df.loc[i,'company'] = company
for attribute in nested_dict.keys():
df.loc[i, attribute] = nested_dict[attribute]
i += 1
输出:
Out[46]:
company name gender title investor
0 company_m abc Male Advisor NaN
1 company_m opq Male Advisor NaN
2 company_b xyz Male Board Member True