【问题标题】:Pandas json_normalize fails with null values in JSONPandas json_normalize 在 JSON 中出现空值失败
【发布时间】:2018-11-11 16:52:12
【问题描述】:

我有以下从外部网络服务获得的 json:

text="""
     [{
        "id":"1",
         "name" : "abc",
         "address":{
                    "flat":"123",
                    "city":"paris",
                    "street":null
         },
         "error":null
     }]

现在我想从这个 json 创建数据框。当我在下面尝试时:

from pandas.io.json import json_normalize
import json
import pandas as pd

resp_json = json.loads(text)
response = json_normalize(resp_json)

但这给了我以下错误:

Error at response = json_normalize(resp_json) KeyError : 'street'

我相信它是因为 street 属性的值为 null,这就是它抛出此错误的原因。如何解决?

如果我喜欢下面,我能够解决,但理想情况下它不是正确的解决方案

text = text.replace('"street":null','"street":""')

注意: - 当我使用 python 版本 3.6.3 :: Anaconda Inc. 和 pandas 版本 0.20.3 时,我没有看到这个问题并且 json_normalize 能够正常工作。这是我的本地机器设置。

在生产机器上,我们有 - Python - 3.5.1 和 pandas 0.23.0。我们遇到了上述问题。

【问题讨论】:

  • Python 3.4 和 pandas 0.20.1 - 没问题,代码可以正常工作。
  • 是的,我在问题中提到的本地配置也可以,但它不适用于生产机器中的配置
  • @SCoder 查看文档后,似乎是 pandas 0.23.0 中的一个错误

标签: python json python-3.x pandas


【解决方案1】:

这似乎是最新版 pandas 中的一个错误:

https://github.com/pandas-dev/pandas/issues/21158

我正在运行 pandas '0.23.0' 并且可以重现相同的错误。 您可以在 github 讨论线程中看到,当 null 值发生在大于 0 的嵌套级别上时,由于条件情况而出现错误。它似乎在大约两个月前发生了变化,这似乎使它成为两周前进入 0.23.0 版本:

https://github.com/pandas-dev/pandas/commit/01882ba5b4c21b0caf2e6b9279fb01967aa5d650#diff-9c654764f5f21c8e9d58d9ebf14de86d

除了等待新版本或降级您的生产环境(这不是一个好主意,因为它很可能会破坏事情),您可以考虑如何在您的环境中处理多个包版本。除非您创建不同的虚拟环境,否则 Pip 无法做到这一点,我相信 conda 也没有。如果你真的需要加载这样的文件,你可以做的是通过将 '0.22.0' 包作为本地模块从 git 克隆它作为临时的、hacky 的解决方案 - 只是为了加载你的 dict。但是当您使用 0.22.0 加载并尝试将其与 0.23.0 一起使用时,可能会出现一些数据帧 API 不一致。

毕竟,您转换字符串的解决方案可能不是那么糟糕。

黑客愉快。

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2020-07-21
    • 2021-08-23
    • 2018-08-19
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多