Как преобразовать фрейм данных pandas в json

#python #json #pandas

Вопрос:

У меня есть json, который выглядит так:

 {
    "response": {
        "docs": [{
                "region_s" : "North America",
                "country_s": "Panama",
                "ArticleHeading_s": "The expected vaccination process begins in Chiriquí",
                "ArticleDate_s": "Fri Jun 18 17:29:07 UTC 2021",
                "refined_summary_t": "Este jueves 13 de mayo la Operación PanavaC-19 inició el proceso de inmunización a los adultos mayores de 60 ",
                "id": "http://www.minsa.gob.pa/noticia/arranca-esperado-proceso-de-vacunacion-en-chiriqui",
                "source_type_s": "Guidances/Regulations",
                "curation_date_t":"12 Jun 2021 to 28 Jun 2021"
            },
            {
                "region_s" : "North America",
                "country_s": "US",
                "ArticleHeading_s": "Emergency Use Authorization for Vaccines to Prevent COVID-19: Guidance for Industry",
                "ArticleDate_s": "Fri Jun 15 17:29:07 UTC 2021",
                "refined_summary_t": "<ol><li> first list</li> Second</li></ol>",
                "id": "http://www.minsa.gob.pa/noticia/arranca-esperado-proceso-de-vacunacion-en-chiriqui",
                "source_type_s": "Press Releases/News",
                "curation_date_t":"12 Jun 2021 to 18 Jun 2021"
            }]
 

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

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

 out = {"response" : {"docs" : {[]} }}
out["response"]["docs"].append(df.to_json(orient='records')[1:-1].replace("'{","{" ))
print(out)
with open('file_name.json', 'w') as f:
    f.write(out)
 

К сожалению, это выдает ошибку:

 Traceback (most recent call last):
  File "C:Usersfatima.arshadPycharmProjectspythonProjectmain.py", line 42, in <module>
    out = {"response" : {"docs" : {[]} }}
TypeError: unhashable type: 'list'
 

Ответ №1:

Я думаю, что этого будет достаточно:

 docs = df.to_dict('records')
out = { 
   "response":{
      "docs":docs,
   },
}
 

и сбросьте словарь out в файл json

Ответ №2:

Я думаю, что проблема в этой линии:

 out = {"response" : {"docs" : {[]} }}
 

Где docs должно быть a list , вы объявили его как a set с элементом изменяемого типа, что не является законным. Я предполагаю, что вы имели в виду:

 out = {"response" : {"docs" : [] }}