Pandas数据帧来自字典的嵌套列表

2024-04-28 03:34:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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'),但它不能给我我想要的。在


Tags: nameboardnonetrue字典titlemyinvestor
2条回答

有点混乱,但这是灵活的,这取决于嵌套字典中的属性,并且会将公司放在自己的列中。在

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

输出:

^{pr2}$

此版本使用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)

输出:

^{pr2}$

也可以将所有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

相关问题 更多 >