English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Exemplo de operação de perda de dados no Pandas
Na vida real, a perda de dados sempre é um problema. Áreas como aprendizado de máquina e mineração de dados enfrentam sérios problemas de precisão na predição de modelos, pois os valores ausentes levam a uma qualidade de dados pior. Nesses campos, o tratamento de valores ausentes é o principal foco para tornar os modelos mais precisos e eficazes.
Vamos considerar uma pesquisa online de um produto. Muitas vezes, as pessoas não compartilham todas as informações sobre elas. Poucos compartilham suas experiências, mas não compartilham quanto tempo usaram o produto; poucos compartilham o tempo que usaram o produto, suas experiências em vez de suas informações de contato. Portanto, de alguma forma ou de outra, sempre haverá uma parte dos dados perdidos, o que é muito comum em situações reais.
Agora vamos ver como usar o Pandas para lidar com valores ausentes (por exemplo, NA ou NaN).
# importar a biblioteca pandas import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df)
Os resultados da execução são os seguintes:
um dois três a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN substituído por '0': um dois três a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
Usando reindexação, criamos um DataFrame com valores ausentes. No output, NaN representa que não é um número.
Para tornar a detecção de valores ausentes mais fácil (e para diferentes tipos de dados de arrays), o Pandas oferece as funções ISNULL() e NOTNULL(), que também são métodos para objetos de séries e frames de dados.-
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df['one'].isnull())
Os resultados da execução são os seguintes:
a False b True c False d True e False f False g True h False Nome: um, dtype: bool
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df['one'].notnull())
Os resultados da execução são os seguintes:
a True b False c True d False e True f True g False h True Nome: um, dtype: bool
Cálculo de dados ausentes ao fazer a agregação de dados, NA será considerado zero Se todos os dados forem inaplicáveis, o resultado será inaplicável
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df['one'].sum())
Os resultados da execução são os seguintes:
2.02357685917
import pandas as pd import numpy as np df = pd.DataFrame(index=[0,1,2,3,4,5],colunas=['one','two']) imprimir(df['one'].sum()
Os resultados da execução são os seguintes:
nan
O Pandas oferece várias maneiras de eliminar valores ausentes. A função fillna pode usar os seguintes métodos para preencher valores NA com dados não nulos.
O seguinte programa mostra como substituir 'NaN' por '0'.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(3, 3],colunas=['one','two']) ) df = df.reindex(['a', 'b', 'c']) imprimir(df) imprimir(("NaN substituído por '0':")) imprimir(df.fillna(0))
Os resultados da execução são os seguintes:
um dois três a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN substituído por '0': um dois três a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
Aqui, preenchemos com zero; por outro lado, também podemos preencher com qualquer outro valor.
Usando o conceito de preenchimento discutido no capítulo 'Reindexação', preencheremos os valores ausentes.
Método | Operação |
pad/fill | Preenchimento para frente< |
bfill/backfill | Preenchimento para trás |
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df.fillna(method='pad'))
Os resultados da execução são os seguintes:
um dois três a 0.077988 0.476149 0.965836 b 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 d -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df.fillna(method='backfill'))
Os resultados da execução são os seguintes:
um dois três a 0.077988 0.476149 0.965836 b -0.390208 -0.551605 -2.301950 c -0.390208 -0.551605 -2.301950 d -2.000303 -0.788201 1.510072 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g 0.085100 0.532791 0.887415 h 0.085100 0.532791 0.887415
Se desejar excluir apenas valores ausentes, use a função dropna com o parâmetro axis juntos. Pelo padrão, axis = 0, ou seja, ao longo das linhas, o que significa que se qualquer valor for NA em uma linha, toda a linha será excluída.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df.dropna())
Os resultados da execução são os seguintes:
um dois três um 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df.dropna(axis=1))
Os resultados da execução são os seguintes:
DataFrame Vazio Colunas: [] Índice: [a, b, c, d, e, f, g, h]
Muitas vezes, devemos substituir um valor específico por um valor genérico. Podemos fazer isso aplicando o método replace().
Substituir valores N/A por valores escalares é o comportamento equivalente da função fillna().
import pandas as pd import numpy as np df = pd.DataFrame({'one': [10,20,30,40,50,2000], 'two': [1000,0,30,40,50,60]}) print(df.replace({1000:10,2000:60})
Os resultados da execução são os seguintes:
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60
import pandas as pd import numpy as np df = pd.DataFrame({'one': [10,20,30,40,50,2000], 'two': [1000,0,30,40,50,60]}) print(df.replace({1000:10,2000:60)
Os resultados da execução são os seguintes:
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60