118 lines
4.5 KiB
Python
118 lines
4.5 KiB
Python
import os
|
|
import pandas as pd
|
|
import numpy as np
|
|
from time import sleep
|
|
|
|
|
|
def listar_pastas(diretorio):
|
|
pastas = [nome for nome in os.listdir(diretorio) if os.path.isdir(os.path.join(diretorio, nome))]
|
|
return pastas
|
|
|
|
|
|
def completar_com_valores_menos_um(dados, estacao, output):
|
|
|
|
|
|
dados_df = pd.read_csv(dados, sep=';', decimal=',', parse_dates=['DATA'], dayfirst=True)
|
|
start_date = '1980-01-01'
|
|
end_date = '2022-12-31'
|
|
filtered_df = dados_df[(dados_df['DATA'] >= start_date) & (dados_df['DATA'] <= end_date)]
|
|
|
|
dados_df=filtered_df
|
|
|
|
dados_df.head(2)
|
|
estacao_df = pd.read_csv(estacao, encoding='utf-8', sep=';', decimal=',')
|
|
estacao_df.head(2)
|
|
|
|
|
|
log_info = []
|
|
|
|
# Variável booleana para verificar se encontrou somente valores <= -1
|
|
somente_valores_menores_ou_igual_a_menos_um = False
|
|
|
|
# Variáveis para armazenar o último código e valor encontrados
|
|
ultimo_codigo_achado = None
|
|
ultimo_valor_atualizado = None
|
|
|
|
|
|
# Copiar dados_df para uma variável para atualização
|
|
AtualizaDados = dados_df.copy()
|
|
|
|
# Caminho do arquivo de log no diretório atual
|
|
log_file_path = os.path.join(os.getcwd(), output+'.txt')
|
|
|
|
# Abrir o arquivo de log para escrita
|
|
total = len(AtualizaDados)
|
|
with open(log_file_path, 'w') as log_file:
|
|
# Iterar sobre AtualizaDados para atualizar os valores
|
|
for index, row in AtualizaDados.iterrows():
|
|
print(f"\rProcessando linha {index+1}/{total}", end='')
|
|
valor = row['VALOR']
|
|
data = row['DATA']
|
|
if valor <= -1:
|
|
|
|
log_file.write(f"Código: {row['CODIGO']}, Data: {row['DATA']}, Valor: {valor}\n")
|
|
|
|
codigo_filtrado = row['CODIGO']
|
|
linhas_filtradas = estacao_df.loc[estacao_df['CODIGO'] == codigo_filtrado]
|
|
|
|
# Iterar sobre os códigos próximos (1codigo, 2codigo, 3codigo)
|
|
for i in range(1, 11): # Considerando as três primeiras colunas de códigos
|
|
codigo_proximo = linhas_filtradas[f'{i}c'].iloc[0]
|
|
filtro = (dados_df['CODIGO'] == codigo_proximo) & (dados_df['DATA'] == data)
|
|
valor_proximo = dados_df.loc[filtro, 'VALOR'].values
|
|
|
|
log_file.write(f"{i}codigo: {codigo_proximo} Valor: {valor_proximo}\n")
|
|
|
|
# Verificar se o valor encontrado não é menor ou igual a -1
|
|
if len(valor_proximo) > 0 and valor_proximo[0] > -1:
|
|
AtualizaDados.loc[index, 'VALOR'] = valor_proximo[0]
|
|
ultimo_codigo_achado = codigo_proximo
|
|
ultimo_valor_atualizado = valor_proximo[0]
|
|
|
|
log_file.write(f"Valor atual {row['VALOR']} - Valor atualizado para: {valor_proximo[0]}\n")
|
|
|
|
break # Parar o loop se encontrar um valor válido
|
|
else:
|
|
log_file.write(f"****Não achou o valor \n")
|
|
somente_valores_menores_ou_igual_a_menos_um = True
|
|
|
|
log_info.append({
|
|
'CODIGO': row['CODIGO'],
|
|
'DATA': row['DATA'],
|
|
'VALOR': valor,
|
|
'ULTIMO_CODIGO_ACHADO': ultimo_codigo_achado,
|
|
'ULTIMO_VALOR_ATUALIZADO': ultimo_valor_atualizado
|
|
})
|
|
log_file.write("---------------------------------------------------\n")
|
|
|
|
# Criar DataFrame com as informações do log e salvar em um CSV
|
|
log_df = pd.DataFrame(log_info)
|
|
log_df.to_csv(output+'-valores de origem .csv', sep=";", encoding='utf-8', decimal=',', index=False)
|
|
|
|
# Exibir mensagem após completar o processo
|
|
print("Dados atualizados:")
|
|
AtualizaDados.to_csv(output, sep=";", encoding='utf-8', decimal=',', index=False)
|
|
#print(AtualizaDados)
|
|
return somente_valores_menores_ou_igual_a_menos_um
|
|
|
|
#df.to_csv(output_csv, sep=";", encoding='utf-8', decimal=',', index=False)
|
|
|
|
|
|
def processar_arquivos_com_menos_um():
|
|
print("Carregando arquivo...")
|
|
diretorio = 'data' # nome da pasta principal
|
|
pastas = listar_pastas(diretorio)
|
|
|
|
for pasta in pastas:
|
|
print(f"Encontrada pasta: {pasta}")
|
|
|
|
estacao = f"./proxima_{pasta}.csv"
|
|
|
|
dados = f"{pasta}_dados.csv"
|
|
|
|
output=f"{pasta}_processada.csv"
|
|
completar_com_valores_menos_um(dados, estacao, output)
|
|
sleep(3)
|
|
|
|
|