微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pandas json_normalize 嵌套 json,其中字典仅存在于某些记录中

如何解决pandas json_normalize 嵌套 json,其中字典仅存在于某些记录中

我正在尝试在具有高度变化的嵌套 json 的数据文件上运行 pandas.json_normalize,其中记录的内容可能会有很大差异。

我正在处理房屋清单文件并试图提取价格。价格数据存储如下,“价格”位于 json 文件中的第一个嵌套级别:

       "prices": [
            {
                "amountMax": 420000,"amountMin": 420000,"availability": "false","currency": "USD","dateSeen": [
                    "2020-12-21T11:57:17.190Z","2020-12-25T02:35:41.009Z"
                ],"isSale": "false","isSold": "true","pricePerSquareFoot": 235,"sourceURLs": [
                    "https://www.redfin.com/FL/Coconut-Creek/.../home/4146834"
                ]
            },# followed by additional entries

我正在使用以下代码行,如果我将输入文件编辑为包含“价格”部分的单个记录,则该代码行:

df3 = pd.json_normalize(df['records'],record_path='prices',Meta=['id'],errors='ignore'                        
                )

但是,完整文件包含许多不包含价格部分的记录。如果我针对具有 2 条记录(一个有,一个没有)的文件运行代码,它会因 KeyError: 'prices'

而失败

显然 json_normalize 中的 'errors='ignore'' 不足以处理错误

我能做什么?我只想完全跳过没有价格的记录。

解决方法

对您的 JSON 进行列表理解即可。我已经合成了一些 JSON 来匹配您对输入数据的描述。

js = {
  "records": [
    {
      "prices": [
        {
          "amountMax": 420000,"amountMin": 420000,"availability": "false","currency": "USD","dateSeen": [
            "2020-12-21T11:57:17.190Z","2020-12-25T02:35:41.009Z"
          ],"isSale": "false","isSold": "true","pricePerSquareFoot": 235,"sourceURLs": [
            "https://www.redfin.com/FL/Coconut-Creek/.../home/4146834"
          ]
        }
      ],"id": 1
    },{"id":2}
  ]
}
pd.json_normalize({"records":[r for r in js["records"] if "prices" in r.keys()]}["records"],record_path="prices",meta="id")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。