Skip to content

Instantly share code, notes, and snippets.

@p-freire
Created March 9, 2020 11:26
Show Gist options
  • Select an option

  • Save p-freire/39d6ab51f45acda13f53442b56526424 to your computer and use it in GitHub Desktop.

Select an option

Save p-freire/39d6ab51f45acda13f53442b56526424 to your computer and use it in GitHub Desktop.
#-------------------------------------------------------------------------------------------------------
# Código feito para consolidar as informações dos extratos
# mensais do CEI (provisionados). A ideia é salvar informações apenas
# relacionadas ao ano de 2020, pois os de 2019 foram creditados em algum momento do ano.
# Para rodar o script:
# 1) Baixe todos os extratos do ano e coloque na mesma pasta que estiver esse script.
# 2) Rode o script na pasta.
# 3) Verifique a saída no arquivo chamado "cei_consolidado_prov.csv", que vai estar dentro da mesma pasta.
#
# Autor: Paulo Freire
# Data: 2020-03-08
#-------------------------------------------------------------------------------------------------------
import pandas as pd
import os
import fnmatch
import re
# Remove colunas desnecessárias
def read_clean_dataframe(file, idx):
df = pd.read_excel(file, header = idx_to_read)
cols_to_drop = [x for x in df.columns if fnmatch.fnmatch(x, "*Unnamed*")]
return df.drop(columns = cols_to_drop).dropna(axis = 0).dropna(axis = 1)
files = []
for file in sorted(os.listdir(os.getcwd())):
if file.endswith(".xls"):
files.append(file)
# Cria primeiro dataframe, que vai servir de base para os outros
df = pd.read_excel(files[0])
for col in df.columns:
aux = df.loc[df[col] == "PROVENTOS EM DINHEIRO - PROVISIONADOS"]
if aux.shape[0]:
idx_to_read = aux.index[0] + 2
df = read_clean_dataframe(files[0], idx_to_read)
# Repete o racional, iterando para o resto da lista
for file in files[1:]:
df_tmp = pd.read_excel(file)
for col in df_tmp.columns:
aux = df_tmp.loc[df_tmp[col] == "PROVENTOS EM DINHEIRO - PROVISIONADOS"]
if aux.shape[0]:
idx_to_read = aux.index[0] + 2
# Faz o concat com o dataframe de base
df_tmp = read_clean_dataframe(file, idx_to_read)
df = pd.concat([df, df_tmp])
df = df.reset_index(drop = True)
# Cria o padrão de ano para pegar somente:
# 1) Lançamentos em 2020;
# 2) Lançamentos sem previsão.
pattern = "[0-9]{4}"
df["Previsão de Pagamento"] = df["Previsão de Pagamento"].astype(str)
aux = [re.search(pattern, x).group() if re.search(pattern, x) else "0" for x in df["Previsão de Pagamento"]]
df["Ano"] = aux
# Pega somente ocorrências de interesse e salva o arquivo
df_prov_ano_seguinte = df.loc[(df["Ano"] == "2020") | (df["Ano"] == "0")]
df_prov_ano_seguinte.groupby(["Ativo", "Especif.", "Previsão de Pagamento"])["Valor"].sum().reset_index().to_csv("cei_consolidado_prov.csv", index = False, encoding = "utf-8-sig")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment