Панды json_normalize терпят неудачу с нулевыми значениями в JSON - PullRequest
0 голосов
/ 01 июня 2018

у меня ниже 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'

Я считаю, что его атрибут улицы имеет значение как ноль, поэтому он и являетсябросая эту ошибку.Как это можно решить?

Если я делаю, как показано ниже, я могу решить, но в идеале это не правильное решение

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

ПРИМЕЧАНИЕ: - Когда яиспользуйте python verion 3.6.3 :: Anaconda Inc. и pandas версии 0.20.3 Я не вижу этой проблемы, и json_normalize может работать правильно.Это моя локальная установка машины.

На производственной машине у нас - Python - 3.5.1 и pandas 0.23.0.Там мы сталкиваемся с вышеуказанным вопросом.

1 Ответ

0 голосов
/ 01 июня 2018

Это, похоже, ошибка в последней версии панд:

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

Я запускаю панд '0.23.0' и могу воспроизвести ту же ошибку.В ветке обсуждения github вы можете видеть, что ошибка возникает из-за условия, когда значение null происходит на уровне вложенности больше 0. Оно, кажется, было изменено около двух месяцев назад, что, похоже, дало сбойв выпуске 0.23.0 две недели назад:

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

За исключением ожидания выпуска новой версии или понижения вашей рабочей среды (что не очень хорошая идея, поскольку она, скорее всего, сломаетсявещей), вы можете подумать о том, как обрабатывать несколько версий пакетов в вашей среде.Пип не сможет этого сделать, если вы не создадите разные виртуальные среды, и я не верю в это.Если вы действительно хотите загружать подобные файлы, то вы можете загрузить пакет «0.22.0» в качестве локального модуля, клонировав его из git как временное, хакерское решение - просто для того, чтобы загрузить свои данные.Но при загрузке с 0.22.0 и попытках использовать его с 0.23.0 могут быть некоторые несоответствия API-интерфейсов для данных.

В конце концов, ваше решение по преобразованию строк может быть не таким уж плохим.

Удачного взлома.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...