如何将一个嵌套字典的列表转换成 pandas 数据框?

3
需要转换为df的列表:
final_list = [{'ID1':{'word':'4', 'talk': '4}}, {'ID2': {'cat':'3', 'dog': '3'}}, {'ID3': {'potatoes':'8', 'height': '6'}}]

预期输出

       Word     Number  Category 
0      word     4       ID1
1      talk     4       ID1
2      cat      3       ID2
3      dog      3       ID2
4      potatoes 8       ID3
5      height   6       ID3

我已经创建了一个数据框,可以得到所需的“Word”和“Number”列。从这个数据框中,我试图将final_list的'Category'键作为第三列添加。显然,这样做是不起作用的,因为在循环时只得到最后一个键元素。这只是展示我的思路。

我的编码尝试

df = pd.DataFrame([(a, b) for item in another_list for a, b in item.items()], 
                   columns=['Word','Number'])

## add the last desired column (failed attempt)
for item in final_list:
    for k,v in item.items():
        df_events["Category"] = k



(1)第一个代码示例(定义final_list)存在语法错误。 (2)第二个代码示例引用了未定义的another_list。 (3)在第二个代码示例中定义了df,但使用了未定义的df_events - Michael Butscher
嗨,Michael,我认为final_list中的语法错误只是一些单词没有被表示为字符串。它们应该是字符串,在引号之间。 - blah
没错,但你应该提供干净的代码,让人们能够帮助你。 - Michael Butscher
其次,我的代码展示了我的思路 - 正如我已经描述的那样,它基于一个不同的列表(我不会粘贴整个列表)。我想知道是否有一种不同的方法来获得预期的输出,即使这意味着忽略我的代码。 - blah
请阅读如何创建一个最小、完整和可验证的示例 - Michael Butscher
2个回答

3

对于元组列表中的内部字典进行扁平化,需要添加下一个语句:

df = pd.DataFrame([(k,v, a) for item in final_list 
                            for a, b in item.items() 
                            for k, v in b.items()],
                   columns=['Word','Number','Category'])
print (df)
       Word Number Category
0      word      4      ID1
1      talk      4      ID1
2       cat      3      ID2
3       dog      3      ID2
4  potatoes      8      ID3
5    height      6      ID3

1
谢谢jezrael!我不知道如何处理嵌套字典列表并将其转换为所需的df - 这个方法非常好。 - blah

1
# flatten the dictionary
flat_dict = {key: val for dct in final_list for key, val in dct.items()}
# generate dataframe
df = pd.DataFrame.from_dict(flat_dict).stack().reset_index()
# set column names
df.columns = ['Word', 'Category', 'Number']
print(df)

       Word Category Number
0       cat      ID2      3
1       dog      ID2      3
2    height      ID3      6
3  potatoes      ID3      8
4      talk      ID1      4
5      word      ID1      4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接