лучший способ объединить файлы json для pd dataframe

#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 содержит один список в каждой строке вместо одного списка