Pandas 规范化字典列表

Posted

技术标签:

【中文标题】Pandas 规范化字典列表【英文标题】:Pandas normalize list of dicts 【发布时间】:2021-07-11 09:57:25 【问题描述】:

我目前正在尝试编辑 Mongo DB 中的数据。我已经能够将数据读入数据框中。但是,我有一个问题,即在数据框中,一列包含一个字典列表。我已经尝试使用 pd.json.normalize 编辑数据,但我得到错误'float' object has no attributes 'values'。如何将列转换为新的数据框?

数据框如下所示:

status message vars
1. ok ['key': 'A1', 'value': '1', 'vartype: '1', 'key': 'A2', 'value': '0', 'vartype: '1', 'key': 'A3', 'value': '1', 'vartype: '1]

执行此行时,我收到以下错误消息:

df3 = pd.json_normalize(df3['vars'])
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-164-da47e4ddf140> in <module>
----> 1 df3 = pd.json_normalize(df3['vars'])

/opt/conda/lib/python3.8/site-packages/pandas/io/json/_normalize.py in _json_normalize(data, record_path, meta, meta_prefix, record_prefix, errors, sep, max_level)
    268 
    269     if record_path is None:
--> 270         if any([isinstance(x, dict) for x in y.values()] for y in data):
    271             # naive normalization, this is idempotent for flat records
    272             # and potentially will inflate the data considerably for

/opt/conda/lib/python3.8/site-packages/pandas/io/json/_normalize.py in <genexpr>(.0)
    268 
    269     if record_path is None:
--> 270         if any([isinstance(x, dict) for x in y.values()] for y in data):
    271             # naive normalization, this is idempotent for flat records
    272             # and potentially will inflate the data considerably for

AttributeError: 'float' object has no attribute 'values'

【问题讨论】:

【参考方案1】:

IIUC 使用:

df3 = pd.json_normalize(df3['vars'].dropna())

【讨论】:

我不断收到:AttributeError: 'list' object has no attribute 'values' @SyrixGG - import jsondf3 = pd.json_normalize(df3['vars'].apply(json.loads)) 的工作情况如何?

以上是关于Pandas 规范化字典列表的主要内容,如果未能解决你的问题,请参考以下文章

pandas DataFrame:规范化一个 JSON 列并与其他列合并

如何在 Python 中规范化包含列表(应保存为列表)的 json 文件熊猫?

Pandas:如何规范化具有多个 JSON 嵌套列表的 JSON 文件?

如何通过 Python Pandas 正确规范化 json

使用 JSON 对象展开 Pandas DataFrame 列

在 Python 中规范化嵌套列表时出错