Pandas: como comparar dois dataframes linha por linha


Você pode usar os seguintes métodos para comparar dois DataFrames do pandas linha por linha:

Método 1: compare DataFrames e mantenha apenas linhas com diferenças

 df_diff = df1. compare (df2, keep_equal= True , align_axis= 0 )

Método 2: compare DataFrames e mantenha todas as linhas

 df_diff = df1. compare (df2, keep_equal= True , keep_shape= True , align_axis= 0 )

Os exemplos a seguir mostram como usar cada método com os seguintes DataFrames do pandas:

 import pandas as pd

#create first DataFrame
df1 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D'],
                    ' points ': [18, 22, 19, 14],
                    ' assists ': [5, 7, 7, 9]})

print (df1)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9

#create second DataFrame
df2 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'E'],
                    ' points ': [18, 30, 19, 20],
                    ' assists ': [5, 7, 7, 9]})

print (df2)

  team points assists
0 to 18 5
1 B 30 7
2 C 19 7
3 E 20 9

Exemplo 1: Compare DataFrames e mantenha apenas linhas com diferenças

O código a seguir mostra como comparar os dois DataFrames linha por linha e manter apenas as linhas que apresentam diferenças em pelo menos uma coluna:

 #compare DataFrames and only keep rows with differences
df_diff = df1. compare (df2, keep_equal= True , align_axis= 0 )

#view results
print (df_diff)

        team points
1 coil B 22
  other B 30
3 choke D 14
  other E 20

Podemos ver que os DataFrames possuem duas linhas diferentes.

Em particular, podemos ver que as linhas nas posições de índice 1 e 3 de cada DataFrame possuem valores diferentes em pelo menos uma coluna.

Os valores na linha self exibem os valores do primeiro DataFrame enquanto os valores na outra linha exibem os valores do segundo DataFrame.

Por exemplo, podemos ver:

  • A linha na posição de índice 1 do primeiro DataFrame contém B na coluna da equipe e 22 na coluna de pontos.
  • A linha na posição de índice 1 do segundo DataFrame contém B na coluna da equipe e 30 na coluna de pontos.

Nota : O argumento keep_equal=True diz aos pandas para manter os valores iguais. Caso contrário, valores iguais serão exibidos como NaN.

Exemplo 2: Compare DataFrames e mantenha todas as linhas

O código a seguir mostra como usar o argumento keep_shape=True para comparar os dois DataFrames linha por linha e manter todas as linhas dos DataFrames originais:

 #compare DataFrames and keep all rows
df_diff = df1. compare (df2, keep_equal= True , keep_shape= True , align_axis= 0 )

#view results
print (df_diff)

        team points assists
0 choke A 18 5
  other A 18 5
1 coil B 22 7
  other B 30 7
2 choke C 19 7
  other C 19 7
3 choke D 14 9
  other E 20 9

O DataFrame resultante contém todas as linhas e colunas dos DataFrames originais.

Nota #1 : A função compare() assume que os dois DataFrames têm as mesmas dimensões.

Nota nº 2: você pode encontrar a documentação completa para a função compare() do pandas aqui .

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em pandas:

Pandas: como comparar duas colunas
Pandas: como comparar três colunas
Pandas: como comparar colunas em dois DataFrames diferentes

Add a Comment

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