Изменен заголовок Python JSON, теперь получена ошибка ключа [значение] отсутствует в индексе - PullRequest
0 голосов
/ 17 декабря 2018

Извиняюсь, если я не все правильно выложил для питонов.Я работаю над исправлением кода, унаследованного от языка, с которым я не часто работаю.

Структура файла json, который регулярно извлекается для программы, изменилась, что привело к ее аварийному завершению.

Соответствующий json раньше выглядел так:

],"custom_variable_values" : [
     "1543788209",
     "Group",
     "Area",
     "Name",
     "00.000000",
     "-00.000000"
],

Теперь это выглядит так

,["1544479406","Group","Area","Name","00.000000","-00.0000000"],

Отсутствие имени для объекта, кажется, разрушаетскрипт.Как я могу изменить имена всех столбцов с 0-7 на старые имена?

Если это помогает питону, который я пытаюсь запустить снова, это:

testdf = hosts['custom_variable_values']
series = pd.Series(testdf)
locdf = pd.DataFrame(item for item in series)
locales = locdf[[4,5]]

Если я сохраняю приведенный выше код в его предыдущем рабочем состоянии, я получаю следующую ошибку:

  File "/usr/lib/cgi-bin/outagesAK.py", line 112, in <module>
  locales = locdf[[4,5]]
  File "/usr/lib/python3/dist-packages/pandas/core/frame.py", line 1963, in 
  __getitem__return self._getitem_array(key)
  File "/usr/lib/python3/dist-packages/pandas/core/frame.py", line 2007, in 
  _getitem_array
  indexer = self.ix._convert_to_indexer(key, axis=1)
  File "/usr/lib/python3/dist-packages/pandas/core/indexing.py", line 1150, 
  in _convert_to_indexer
  raise KeyError('%s not in index' % objarr[mask])
  KeyError: '[4 5] not in index'

Имеет смысл, что его нет в индексе, когда у меня больше нет ничего с именем 'custom_variable_values'

Если я изменяю код так, чтобы он читал testdf = hosts[6], он выполнялся без ошибок, но он не извлекает данные, которые он должен находить в позициях 4 и 5. В данный момент он не выдает коды ошибок.

Обновление:

Когда я просто пытаюсь переименовать заголовки столбцов, все значения превращаются в NaN.Это проблема индексации?

Что я сделал, чтобы изменить заголовки при создании кадра данных.

df = pd.DataFrame(data, columns = ['col1','col2','col3','etc'])

Обновление 2:

Удалось получить в кадре данных правильные имена столбцов, выполнив командуследующее:

columns = ['col1', 'col2', 'col3', 'etc']
df = pd.read_json(file) 
df.columns = columns

Обновление 3: Вытащил мою последнюю стабильную версию кода, добавил код из Обновления 2, и все работает сейчас.

1 Ответ

0 голосов
/ 17 декабря 2018

Код ниже решил мои проблемы.Мои столбцы в моем исходном файле JSON получили предварительное имя.Произошло изменение в бэкэнде, которое изменило способ рендеринга json (почему это произошло, неясно)

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

columns = ['col1', 'col2', 'col3', 'etc']
df = pd.read_json(file) 
df.columns = columns
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...