Заголовок Python JSON изменен, теперь он получает ошибку ключа [значение] не в индексе

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

Структура 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, и теперь все работает.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
318
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Обновите свой вопрос. Пожалуйста, не публикуйте обновления как отдельный ответ

Rarblack 17.12.2018 07:49

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

jfmc 17.12.2018 08:12

Это определенно должен быть ответ. @jfmc Не все думают, когда рецензируют; поэтому чтобы что-то удалить, нужно 5.

wizzwizz4 17.12.2018 08:20

Другие вопросы по теме