Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Comparar duas colunas de dois dataframes.

Eu tenho dois dataframes um que eu mesmo fiz e outro é do meu banco. Eu tento achar as datas iguais no meu dataframe com o dataframe do meu extrato retirado direto do site do bradesco e depois eu tento achar os valores iguais do meu dataframe e do dataframe do bradesco. Pois eu tento sempre classificar minhas contas mas infelizmente eu acabo esquecendo de lançar todas as contas no meu dataframe e gostaria de saber o que está faltando para classificar. E mando ele me falar as linhas de cada um deles que é igual, só que ele está me retornando esse erro e eu não sei o que fazer.

for i in Bradesco.index:
    for j in Sistema.index:
        if (Bradesco.loc[i ,"Data"] == Sistema.loc[j ,"DATA"]):
            if (Bradesco.loc[i ,"Débito"] == Sistema.loc[j ,"Débito"]):
                print(i, j)

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

4 respostas
solução!

Olá João,

Se eu entendi bem o que você quer é encontrar as diferenças? Ver o que está faltando em um DF comparado ao outro, correto?

Você pode fazer essa comparação através de um merge:

Bradesco.merge(Sistema, on=['Data', 'Débito'], how='outer', suffixes=['', '_'], indicator=True)

O merge faz a união dos dois DataFrames, mas o detalhe importante é o indicator=True que vai mostrar na coluna _merge para cada linha se ela existe apenas no primeiro DF (left_only), apenas no segundo DF (right_only) ou nos dois DFs (both).


Segue o código completo do meu teste:

import pandas as pd
import datetime

data1 = {
    'data': [datetime.date(2019, 10, 1), datetime.date(2019, 10, 2), datetime.date(2019, 10, 3), datetime.date(2019, 10, 3)],
    'debito': [100., 75., 500, 100]
}

data2 = {
    'data': [datetime.date(2019, 10, 1), datetime.date(2019, 10, 2), datetime.date(2019, 10, 3)],
    'debito': [100., 75., 100]
}

df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data2)

df1.merge(df2, on=['data', 'debito'], how='outer', suffixes=['', '_'], indicator=True)

Resultado:

Nossa Muito obrigado, você resolveu meu problema. Sempre que venho tirar dúvidas você me ajuda, Muito Obrigado Lucas, você manja demais.

Lucas se você tiver como me passar alguma listinha de funções que acha legal eu dar uma estudada referente a esse assunto, eu ficaria muito grato.

Sem problemas João!

Sobre as funções o pandas tem demais, quase tudo que a gente precisar fazer o pandas já tem algo pronto pra ajudar, por isso fica até difícil listar só algumas.

Recomendo primeiro entender bem as funções de leitura de arquivos e criação de DataFrames e Series (pd.read_csv(), pd.DataFrame(), etc.). Após isso é bom conhecer sobre os tipos (dtypes) e os métodos de conversão dos tipos (to_numeric(), to_datetime(), astype(), etc.) e então sobre seleção e filtragem (loc[], uso do [] e [[]], filtragem por Series booleanas, etc.). Chegando por fim em funções um pouco mais avançadas como agrupamentos com groupby() e o uso do apply()

Com essa base já dá pra ir bem longe, a maioria das funções mais intermediárias/avançadas eu normalmente só descubro no momento que preciso utilizar e vou pesquisar, sempre com ajuda do Colab pra testar.


Nessa página (em inglês) o pandas mostra todas as funcionalidades básicas essenciais com exemplos.