Приносим извинения, если у меня не все выложено правильно для 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, и теперь все работает.
Приведенный ниже код решил мои проблемы. Мои столбцы в моем исходном файле json были названы заранее. Произошло изменение в бэкэнде, которое изменило способ рендеринга json (почему это произошло, неясно)
Мне пришлось вручную создать переменную, назвав имена столбцов, а затем применить ее к фрейму данных.
columns = ['col1', 'col2', 'col3', 'etc']
df = pd.read_json(file)
df.columns = columns
Это было буквально решением моей проблемы. Моя проблема заключалась в том, что заголовки столбцов исчезли из json, ничего не индексировалось, потому что я запрашивал несуществующие значения. Я создал переменную с тем, что я хотел, чтобы имена столбцов были, загрузил json, а затем переименовал все столбцы в фрейме данных.
Это определенно должен быть ответ. @jfmc Не все думают, когда рецензируют; поэтому чтобы что-то удалить, нужно 5.
Обновите свой вопрос. Пожалуйста, не публикуйте обновления как отдельный ответ