【问题标题】:How can I transform a list of nested dictionaries into a pandas dataframe?如何将嵌套字典列表转换为 pandas 数据框?
【发布时间】:2020-03-31 10:27:48
【问题描述】:

要转换为 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 的“类别”键添加为第三列。这显然不起作用,因为我在循环时只得到最后一个关键元素。这只是为了展示我的思路。

我的编码尝试

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,我认为 final_list 中的语法错误仅仅是因为某些单词没有表示为字符串。它们应该是字符串,在引号之间。
  • 对,但您应该提供干净的代码,人们可以使用它来帮助您。
  • 其次,我的代码是为了展示我的思路——正如我已经描述的,它基于不同的列表(我不会粘贴整个列表)。我想知道是否有其他方法可以获得预期的输出,即使这意味着忽略我的代码。

标签: python pandas list dictionary nested


【解决方案1】:

对于扁平化元组列表的内部字典,需要添加 next for 语句:

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

【讨论】:

  • 谢谢你耶斯瑞尔!不知道如何处理嵌套字典列表并将其转换为所需的 df - 这非常好。
【解决方案2】:
# 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

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 2022-01-07
    • 2015-10-06
    • 2020-06-02
    • 1970-01-01
    • 2021-12-21
    • 2018-10-26
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多