Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Meu pipeline salvou os dados todos errados. Alguem consegue me ajudar a encontrar o erro?

Abaixo, todo o código. Acho que minha "def transformando_dados_tabela(dados,nomes_colunas):" está errada, mas não sei o motivo.

Quando eu printei na tela o resultado, veja o que aconteceu:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeTudo saiu como indisponível, menos o valor em reais. Está errado isso.

import json #Importo a biblioteca do json
import csv 

#Início das funções que eu criei
def leitura_json(path_json):  
    dados_json=[]
    with open(path_json,'r') as file: #Aqui, eu digo que a leitura é um arquivo e chamo ele de file.O 'r' é um comando de ler 
        dados_json=json.load(file) #declaro uma variável e digo para ela executar o file
    return dados_json  
  
def leitura_csv(path_csv):
    dados_csv=[]
    with open(path_csv,'r') as file:
        spamreader=csv.DictReader(file, delimiter=',')
        for row in spamreader:
            dados_csv.append(row)
    return dados_csv

def leitura_dados(path, tipo_arquivo):
    dados = []

    if tipo_arquivo == 'csv':
        dados = leitura_csv(path)
        
    elif tipo_arquivo == 'json':
        dados = leitura_json(path)
        
    return dados

def get_columns(dados):
    return list(dados[-1].keys())

def rename_columns(dados, key_mapping):
    new_dados_csv = []
    
    for old_dict in dados:
            dict_temp = {}
            for old_key, value in old_dict.items():
                dict_temp[key_mapping[old_key]] = value
            new_dados_csv.append(dict_temp)
            
    return new_dados_csv

def size_data(dados):
    return len(dados)

def join(dadosA,dadosB):
    combined_list=[]
    combined_list.extend(dados_json)
    combined_list.extend(dados_csv)
    return combined_list

def transformando_dados_tabela(dados,nomes_colunas):

    dados_combinados_tabela=[nomes_colunas]

    for row in dados:
        linha=[]
        for coluna in nomes_colunas:
            linha.append(row.get(coluna,'Indisponível'))
        dados_combinados_tabela.append(linha)
    return dados_combinados_tabela

def salvando_dados(dados, path):
 with open(path, 'w') as file:
    writer = csv.writer(file)
    writer.writerows(dados)

#Fim das funções

path_json='data_raw/dados_empresaA.json' #indico o caminho do arquivo nas pastas
path_csv= 'data_raw/dados_empresaB.csv'

#Iniciando a leitura
dados_json = leitura_dados(path_json, 'json')
nome_colunas_json = get_columns(dados_json)
tamanho_dados_json=size_data(dados_json)
print(nome_colunas_json)
print(f"Tamanho dos dados json: {tamanho_dados_json}")

dados_csv = leitura_dados(path_csv, 'csv')
nome_colunas_csv = get_columns(dados_csv)
tamanho_dados_csv=size_data(dados_csv)
print(f"Tamanho dos dados csv: {tamanho_dados_csv}")

key_mapping = {'Nome do Item': 'Nome do Produto',
                            'Classificação do Produto': 'Categoria do Produto',
                            'Valor em Reais (R$)': 'Preço do Produto (R$)',
                            'Quantidade em Estoque': 'Quantidade em Estoque',
                            'Nome da Loja': 'Filial',
                            'Data da Venda': 'Data da Venda'}
key_mapping


#Transformação de dados

new_dados_csv = rename_columns(dados_csv, key_mapping)
colunas_new_dados_csv=get_columns(new_dados_csv)
print(colunas_new_dados_csv)

dados_fusao = join(dados_json,dados_csv)
nomes_colunas_fusao = get_columns(dados_fusao)
tamanho_dados_fusao = size_data(dados_fusao)
print(nomes_colunas_fusao)
print(tamanho_dados_fusao)

#Salvando dados

dados_fusao_tabela = transformando_dados_tabela(dados_fusao,nomes_colunas_fusao)

path_dados_combinados = 'data_processed/dados_combinados.csv'

salvando_dados(dados_fusao_tabela, path_dados_combinados)

print(path_dados_combinados)
1 resposta
solução!

Olá José, tudo bem?

Notei que no seu código a função join(), você escreveu:

def join(dadosA,dadosB):
    combined_list=[]
    combined_list.extend(dados_json)
    combined_list.extend(dados_csv)
    return combined_list

Aqui, ao invés de usar os parâmetros dadosA e dadosB, você está referenciando dados_json e dados_csv diretamente dentro da função, o que pode levar a problemas na fusão dos dados. O correto seria:

def join(dadosA, dadosB):
    combined_list = []
    combined_list.extend(dadosA)
    combined_list.extend(dadosB)
    return combined_list

Isso pode estar causando a inconsistência nos dados, fazendo com que todas as colunas (exceto a de valor) fiquem com 'Indisponível', porque os dados não estão sendo corretamente mesclados. Tente corrigir isso e refaça o processo para verificar se os dados aparecem corretamente.

Espero que dê certo!

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado