如何将包含嵌套列表的词典列表转换为字典列表

2024-05-13 00:29:49 发布

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

我有一个目录:

list_of_dicts = [{'name': 'a', 'counts': [{'dog': 2}]}, 
          {'name': 'b', 'counts': [{'cat': 1}, {'capibara': 5}, {'whale': 10}]}, 
          {'name': 'c', 'counts': [{'horse':1}, {'cat': 1}]]

我想将其转换为熊猫数据帧,如下所示:

^{tb1}$

在当前代码中,我尝试将其规范化:

from pandas import json_normalize
df = json_normalize(list_of_dicts, 'counts')

但我想我走错了方向。另外,如果我做一个简单的df = pd.DataFrame(list_of_dicts),它会导致每个dict列表都是一个单行值,这是不需要的


Tags: of数据name目录jsondflistcat
3条回答
  • 必须使用pandas.json_normalizerecord_pathmeta参数
  • 然后,这些列将是动物,它们被堆叠成一列
import pandas as pd

# test data
list_of_dicts = [{'name': 'a', 'counts': [{'dog': 2}]}, {'name': 'b', 'counts': [{'cat': 1}, {'capibara': 5}, {'whale': 10}]}, {'name': 'c', 'counts': [{'horse':1}, {'cat': 1}]}]

# load and transform the dataframe
pd.json_normalize(list_of_dicts, 'counts', 'name').set_index('name').stack().reset_index().rename(columns={'level_1': 'Animal', 0: 'Frequency'})

# display(df)
  name    Animal  Frequency
0    a       dog        2.0
1    b       cat        1.0
2    b  capibara        5.0
3    b     whale       10.0
4    c     horse        1.0
5    c       cat        1.0

melt试试json_normalize

(pd.json_normalize(list_of_dicts, record_path='counts', meta='name')
   .melt('name', var_name='Animal', value_name='Frequency')
   .dropna()
)

输出:

   name    Animal  Frequency
0     a       dog        2.0
7     b       cat        1.0
11    c       cat        1.0
14    b  capibara        5.0
21    b     whale       10.0
28    c     horse        1.0

试试这个

>>> pd.json_normalize(list_of_dicts, 'counts').melt().dropna()

相关问题 更多 >