#python #json #dataframe
#python #json #фрейм данных
Вопрос:
У меня есть несколько файлов json, в которых сохранены ответы от запросов, которые содержат 5 записей в строке / списке, подобных этому
[{"Record1": "1", "Record2": "2", "Record3": "3", "Record4": "4", "Record5": "5"}]
Должен ли я сохранить его с соответствующим содержимым, которое возвращается без массива, или с соответствующим json (), который вложен в массив? Какова наилучшая практика?
Каков наилучший способ объединить их (около 10 кб файлов), чтобы я мог поместить их в фрейм данных pandas и продолжить анализ? Я попытался поместить это так и попытаться загрузить с помощью json.load (), но он возвращается с ошибкой: Дополнительные данные
import json
import codecs
import glob
files = glob.glob('./results/*.json')
with codecs.open('combined_results.json', 'w', encoding='utf-8') as outfile:
for file in files:
f = open(file, 'r')
data = json.load(f)
json.dump(data, outfile, ensure_ascii=False, indent=None)
outfile.write("n")
Вывод:
[{"Record1": "1", "Record2": "2", "Record3": "3", "Record4": "4", "Record5": "5"}]
[{"Record1": "1", "Record2": "2", "Record3": "3", "Record4": "4", "Record5": "5"}]
[{"Record1": "1", "Record2": "2", "Record3": "3", "Record4": "4", "Record5": "5"}]
загрузите объединенный файл в object: (ошибка: дополнительные данные)
f = codecs.open('combined_results.json', 'r', encoding='utf-8')
data = json.load(f)
Ответ №1:
Вы можете изменить свой код, чтобы объединить ваши файлы в допустимый объект json:
combined_results = []
with open('combined_results.json', 'w', encoding='utf-8') as outfile:
for file in files:
f = open(file, 'r')
combined_results.append(json.load(f)[0])
json.dump(combined_results, outfile)
Теперь, чтобы прочитать этот файл в фрейме данных, попробуйте pd.read_json
:
pd.read_json('combined_results.json')
Обновить:
На самом деле вам вообще не нужен combined_results.json
файл. Если вы не хотите, чтобы ваши файлы были объединены в один файл, который вы хотите использовать позже, вы можете напрямую преобразовать список combined_results
в фрейм данных.
combined_results = []
for file in files:
f = open(file, 'r')
combined_results.append(json.load(f)[0])
pd.DataFrame(combined_results)
Комментарии:
1. спасибо, это сработало. Но как я могу разложить отдельные данные по строкам?
2. теперь это работает! спасибо, приятель! но не могли бы вы подробнее объяснить, должен ли я хранить json с массивом или без него?
3. Нет проблем! 🙂 Я попытался отредактировать свой предыдущий комментарий и удалил его по ошибке. Но рад, что это работает сейчас.
Ответ №2:
Попробуйте pd.DataFrame.from_records('combined_results.json')
Комментарии:
1. combined_result.json содержит один список в каждой строке вместо одного списка