Como comparar dois dataframes no pandas


Freqüentemente, você pode estar interessado em comparar os valores entre dois DataFrames do panda para identificar suas semelhanças e diferenças.

Este tutorial explica como fazer isso.

Exemplo: Comparando dois DataFrames em Pandas

Suponha que temos os dois DataFrames panda a seguir, cada um contendo dados de quatro jogadores de basquete:

 import pandas as pd

#define DataFrame 1
df1 = pd. DataFrame ({'player': ['A', 'B', 'C', 'D'],
                   'points': [12, 15, 17, 24],
                   'assists': [4, 6, 7, 8]})
df1


        player points assists
0 to 12 4
1 B 15 6
2 C 17 7
3 D 24 88

#define DataFrame 2
df2 = pd. DataFrame ({'player': ['A', 'B', 'C', 'D'],
                    'points': [12, 24, 26, 29],
                    'assists': [7, 8, 10, 13]})
df2

	player points assists
0 to 12 7
1 B 24 8
2 C 26 10
3 D 29 13

Exemplo 1: Descubra se os dois DataFrames são iguais.

Podemos primeiro descobrir se os dois DataFrames são idênticos usando a função DataFrame.equals() :

 #see if two DataFrames are identical
df1. equals (df2)

False

Os dois DataFrames não contêm exatamente os mesmos valores, portanto esta função retorna corretamente False .

Exemplo 2: Encontre as diferenças nas estatísticas dos jogadores entre os dois DataFrames.

Podemos encontrar as diferenças entre as assistências e pontos de cada jogador usando a função pandas subtract() :

 #subtract df1 from df2
df2. set_index ('player'). subtract (df1.set_index('player'))

	assist points
player		
At 0 3
B 9 2
C 9 3
D 5 5

A maneira de interpretar isso é:

  • O jogador A teve o mesmo número de pontos em ambos os DataFrames, mas teve mais 3 assistências no DataFrame 2.
  • O jogador B teve mais 9 pontos e mais 2 assistências no DataFrame 2 em comparação com o DataFrame 1.
  • O jogador C teve mais 9 pontos e mais 3 assistências no DataFrame 2 em comparação com o DataFrame 1.
  • O Jogador D teve mais 5 pontos e mais 5 assistências no DataFrame 2 em comparação com o DataFrame 1.

Exemplo 3: Encontre todas as linhas que existem apenas em um único DataFrame.

Podemos usar o código a seguir para obter uma lista completa de linhas que aparecem apenas em um único DataFrame:

 #outer merge the two DataFrames, adding an indicator column called 'Exist'
diff_df = pd. merge (df1, df2, how=' outer ', indicator=' Exist ')

#find which rows don't exist in both DataFrames
diff_df = diff_df. loc [diff_df[' Exist '] != ' both ']
diff_df

	player points assists Exist
0 A 12 4 left_only
1 B 15 6 left_only
2 C 17 7 left_only
3 D 24 8 left_only
4 A 12 7 right_only
5 B 24 8 right_only
6 C 26 10 right_only
7 D 29 13 right_only

Neste caso, os dois DataFrames não partilham linhas idênticas, pelo que existem 8 linhas no total que só aparecem num dos DataFrames.

A coluna denominada “Exist” nos informa convenientemente em qual DataFrame cada linha aparece exclusivamente.

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *