【问题标题】:reading a JSON file and converting to CSV with python pandas读取 JSON 文件并使用 python pandas 转换为 CSV
【发布时间】:2019-10-29 15:52:44
【问题描述】:

我有这个 json 文件,我想使用 pandas 将其转换为 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

aqui está meu có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)

我不知道他为什么不能读取文件

【问题讨论】:

  • 这能回答你的问题吗? Convert JSON to CSV with pandas
  • 我已经尝试过这个 POST 但它没有用
  • 你希望 csv 看起来像什么?
  • 用逗号分隔,行列中
  • 还有哪些列?

标签: python json pandas


【解决方案1】:
  • 请记住,pandas 是关于具有重复列标题的数据表。
  • 此处显示的 JSON 整体上与表格数据不对应。
  • 此 JSON 需要通过单独的键读取
  • 或者,partesmovimentacoes 的长度必须相同。
    • partesvalue 的长度为 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)

【讨论】:

  • 我正确,他返回给我 ValueError: The DataFrame builder was not called correct!
  • @user158433 我只能帮助您处理您提供的信息。该代码已针对您提供的 JSON 进行了测试,因此我知道语法是正确的。但是,如果整个 JSON 与提供的内容有很大不同,则可能存在我无法解释的问题。
猜你喜欢
  • 1970-01-01
  • 2017-05-02
  • 2017-06-10
  • 2017-09-12
  • 2019-03-15
  • 1970-01-01
  • 2019-10-09
  • 2021-10-14
  • 1970-01-01
相关资源
最近更新 更多