2
I need to compare two. csv files for inconsistencies. The boleto.txt file contains information about the boletos issued by a company. This file has 500,000 lines. The.txt file contains information of the items included in each boleto. This file has 1.2 million lines.
I need to verify that the sum of the value of the items in the.txt file is equivalent to the value of the boleto in the.txt file.
I made the following code in python:
import numpy as np
import pandas as pd
#lendo o arquivo boleto.txt
boleto = pd.read_csv("""C:/boleto.txt""", header = None,delimiter='\t',encoding = 'ISO-8859-1')
boleto.columns = ['sigla','unidade','numero','dt_vencimento','valor','dt_pagamento','valor_pago','dt_credito','reembolso','status','abonado','inativo','nao_contabil','pessoa','custas']
#lendo o arquivo lancamentos.txt
lancamentos = pd.read_csv("""C:/lancamentos.txt""", header = None,delimiter='\t',encoding = 'ISO-8859-1')
lancamentos.columns = ['sigla','unidade','numero','dt_vencimento','dt_credito','valor','valor_pago','destinacao','desconto','conta','desconhecido']
#percorrendo boleto por boleto
for row in boleto.index:
#definindo as condições
cond1 = (lancamentos['sigla'] == boleto.iloc[row]["sigla"])
cond2 = (lancamentos['unidade'] == boleto.iloc[row]["unidade"])
cond3 = (lancamentos['numero'] == boleto.iloc[row]["numero"])
cond4 = (lancamentos['dt_vencimento'] == boleto.iloc[row]["dt_vencimento"])
#fazendo os filtros para pegar os lançamento referentes ao boleto
resultado = lancamentos.loc[(cond1 & cond2 & cond3 & cond4)]
#caso o valor do boleto seja diferente da soma dos valores dos lançamentos
if boleto.iloc[row]["valor"] != resultado['valor'].sum().round(decimals = 2):
print('diferente')
print(boleto.iloc[row]["valor"])
print(resultado['valor'].sum())
This code even works, only it’s taking horrors to run. Is there any way to rewrite it to make it faster?
Gugax, good night! Provide test data and an example of expected result, so people can help you more easily. Hug!
– lmonferrari