【问题标题】:Deeply nested json - a list within a dictionary to Pandas DataFrame深度嵌套的 json - Pandas DataFrame 字典中的列表
【发布时间】:2021-06-09 04:57:26
【问题描述】:

我正在尝试解析嵌套的 json 结果。

data = {
"results": [
        {
            "components": [
                {
                    "times": {
                            "periods": [
                                {
                                    "fromDayOfWeek": 0,
                                    "fromHour": 12,
                                    "fromMinute": 0,
                                    "toDayOfWeek": 4,
                                    "toHour": 21,
                                    "toMinute": 0,
                                    "id": 156589,
                                    "periodId": 20855
                                }
                            ],
                        }
                    }
                ],
            }
        ],
    }

我可以访问并为“结果”和“组件”列表创建数据框,但由于“时间”字典,无法访问“周期”。到目前为止,我有这个:

df = pd.json_normalize(data, record_path = ['results','components'])

需要一个单独的“句点”数据框,其中包含列名和值。非常感谢您对此的帮助。谢谢!

【问题讨论】:

  • 为什么不df = pd.json_normalize(data, record_path = ['results','components', 'times', 'periods'])
  • @jlesuffleur 你是对的,它有效。我在这里简化了这个例子,但了解到错误不是来自 json.normalize,而是来自循环。感谢您的评论!

标签: python pandas


【解决方案1】:
  • 我的结果
  • II 组件
  • 三倍
  • IIII期

规范化应该是正确的方式:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.json_normalize.html

有 4 级嵌套。结果中可能有 x 个组件,组件中有 y 次 - 但是这种嵌套类型是过度设计的吗?

获取数据最简单的方法是:

print data['a']['b']['c']['d'] (...)

在你的情况下:

打印数据['results']['components']['times']['periods']


你可以通过这段代码访问具体的嵌套层级:

def GetPropertyFromPeriods (property):
    propertyList = []
    for x in data['results']['components']['times']:
        singleProperty = photoURL['periods'][property]
        propertyList.append(singleProperty)
    return propertyList

这使您可以访问期间内的一个属性(fromDayOfWeek、fromHour、fromMinute)

将json值转换成pandas数据框:

print pd.DataFrame(data, columns=["columnA", "columnB”])

如果卡住:

How to Create a table with data from JSON output in Python

Python - How to convert JSON File to Dataframe

熊猫文档:

  • pandas.DataFrame.from_dict
  • pandas.json_normalize

【讨论】:

  • 嘿 Piotr,感谢您的回答。你是对的,它起作用了。不幸的是,我的实际问题与我刚刚学到的嵌套无关,而是与循环有关。我在这里简化了示例,但我的实际代码有一个循环,它会因为缺少嵌套而引发错误,我必须先解决这个问题。感谢您的回答 - 不胜感激!
  • 错误是由于:“times”有时没有“periods”列表,所以当我迭代并尝试获取时,我猜循环没有找到“periods”给它。
猜你喜欢
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 2017-12-26
  • 2023-04-02
  • 2019-06-27
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多