读取JSON文件并使用python pandas转换为CSV

时间:2019-10-29 15:52:44

标签: python json pandas

我有这个json文件,我想使用熊猫将其转换为CSV

  {
        "partes": [
            {
                "processo": "1001824-89.2019.8.26.0493",
                "tipo": "Reqte: ",
                "nome": "Sérgio Izaias Massaranduba  Advogada: Mariana Pretel E Pretel      ",
                "cnpj_cpf": "Não encontrado",
                "oab": "Não encontrado"
            },
            {
                "processo": "1001824-89.2019.8.26.0493",
                "tipo": "Reqda: ",
                "nome": "CLARO S/A   ",
                "cnpj_cpf": "Não encontrado",
                "oab": "Não encontrado"
            }
        ],
        "movimentacoes": [
            {
                "processo": "1001824-89.2019.8.26.0493",
                "data": "28/10/2019",
                "tem_anexo": "",
                "movimentacao": " Distribuído Livremente (por Sorteio) (movimentação exclusiva do distribuidor)  "
            }
        ]
    }

当我使用以下功能read_json时, 他给我返回了其中一个错误ValueError: arrays must all be same length

aquiestámeucódigo:

import pandas as pd
import json
import os

os.chdir('C:\\Users\\Suporte\\Desktop\\AUT\\autonomation')


df = pd.read_json('file.json')

df_ = df.to_csv('file.csv', sep=';',index=False)

我不知道他为什么看不到文件

1 个答案:

答案 0 :(得分:1)

  • 请记住,pandas与数据表有关,具有重复的列标题。
  • 总体上,此处显示的JSON与表格数据不对应。
  • 此JSON需要通过单独的键读取
  • 或者,partesmovimentacoes的长度必须相同。
    • partes value的长度为2,而movimentacoes的长度为1。
  • 在名为test1.json的文件中提供以下数据

数据:

{
    "partes": [{
            "processo": "1001824-89.2019.8.26.0493",
            "tipo": "Reqte: ",
            "nome": "Sérgio Izaias Massaranduba  Advogada: Mariana Pretel E Pretel      ",
            "cnpj_cpf": "Não encontrado",
            "oab": "Não encontrado"
        }, {
            "processo": "1001824-89.2019.8.26.0493",
            "tipo": "Reqda: ",
            "nome": "CLARO S/A   ",
            "cnpj_cpf": "Não encontrado",
            "oab": "Não encontrado"
        }
    ],
    "movimentacoes": [{
            "processo": "1001824-89.2019.8.26.0493",
            "data": "28/10/2019",
            "tem_anexo": "",
            "movimentacao": " Distribuído Livremente (por Sorteio) (movimentação exclusiva do distribuidor)  "
        }
    ]
}

代码:

from pathlib import Path
import pandas as pd
import json

# path to file
p = Path(r'c:\some_path_to_data\test1.json')

# read the JSON file in
with p.open('r') as f:
    data = json.loads(f.read())

# create the dataframe
df_partes = pd.DataFrame.from_dict(data['partes'])
print(df_partes)

                  processo     tipo                                                                  nome         cnpj_cpf              oab
 1001824-89.2019.8.26.0493  Reqte:   Sérgio Izaias Massaranduba  Advogada: Mariana Pretel E Pretel        Não encontrado  Não encontrado
 1001824-89.2019.8.26.0493  Reqda:                                                           CLARO S/A     Não encontrado  Não encontrado

df_movimentacoes = pd.DataFrame.from_dict(data['movimentacoes'])
print(df_movimentacoes)

                  processo        data tem_anexo                                                                         movimentacao
 1001824-89.2019.8.26.0493  28/10/2019             Distribuído Livremente (por Sorteio) (movimentação exclusiva do distribuidor)

# save to csv
df_partes.to_csv('partes.csv', index=False)
df_movimentacoes('moviementacoes.csv', index=False)
  • 如果JSON有很多键,请考虑制作如下的数据帧字典:
df_dict = {key: pd.DataFrame.from_dict(data[key]) for key in data.keys()}

# Access a specific dataframe just like a regular dictionary
df_dict['partes']

# save to csv
for key in df_dict.keys():
    df_dict[key].to_csv(f'{key}.csv', index=False)