<jupyter_start><jupyter_text>Missing Data Para valores nulos o Pandas adota o mesmo padrão do Numpy e utilizia NaN (Not a Number), que é um valor especial de ponto flutuante reconhecido por todos os sistemas que usam a representação de ponto flutuante IEEE padrão.<jupyter_code>import numpy as np
import pandas as pd
# Verificando o dtype de uma array com NaN
vals2 = np.array([1, np.nan, 3, 4])
vals2.dtype<jupyter_output><empty_output><jupyter_text>O problema dos dados que possuem NaN é que eles "contaminam" o restante dos demais dados, inviabilizando operações<jupyter_code># Executando algumas operações
vals2.sum(), vals2.min(), vals2.max()<jupyter_output>C:\Users\RILDO\Anaconda3\lib\site-packages\numpy\core\_methods.py:29: RuntimeWarning: invalid value encountered in reduce
  return umr_minimum(a, axis, None, out, keepdims)
C:\Users\RILDO\Anaconda3\lib\site-packages\numpy\core\_methods.py:26: RuntimeWarning: invalid value encountered in reduce
  return umr_maximum(a, axis, None, out, keepdims)<jupyter_text>O NumPy porém provê algumas agregações especiais que ingoram valores ausentes<jupyter_code>np.nansum(vals2), np.nanmin(vals2), np.nanmax(vals2)<jupyter_output><empty_output><jupyter_text>**Operando Valores Nulos**  O Pacote Pandas possui vários métodos para detectar, remover e substituir valores nulos. **Detectando valores nulos**  O Pandas possui 2 métodos para detectar valores nulos:        isnull()       Gera valores boolean que indica valores ausentes        notnull()       Oposto de insnull<jupyter_code>data = pd.Series([1, np.nan, 'hello', None])
data.isnull()<jupyter_output><empty_output><jupyter_text>**Descartando valores nulos**  O método para descartar valor nulo é o dropna:    dropna()       Retorna uma versão filtrada dos dados<jupyter_code># Descartando valores NaN para uma array
data.dropna()<jupyter_output><empty_output><jupyter_text>Para DataFrames não é possível descartar valores NaN de forma isolada, pois só podemos descartar linhas e colunas inteiras.<jupyter_code># Criando um DataFrame
df = pd.DataFrame([[1, np.nan, 2],
                   [2, 3, 5],
                   [np.nan, 4, 6]])
df
# Por padrão a função dropna() irá descartar todas as linhas que tiverem qualquer valor nulo:
df.dropna()
# Porém podemos escolher se queremos descartar colunas com valores nulos:
df.dropna(axis='columns')
# Podemos também escolher descartar somente as linhas/colunas que possuírem todos os valores NaN
# Para isso utilizamos o parâmetro how=all, que no caso de nosso DaaFrame não descartará nenhum valor
df.dropna(axis='columns', how='all')
# Para um controle mais refinado, o parâmetro thresh permite especificar um número mínimo de valores 
# não nulos para a linha / coluna a ser mantida:
df.dropna(axis='rows', thresh=3)<jupyter_output><empty_output><jupyter_text>**Preenchendo valores nulos**  Às vezes, em vez de descartar valores de NA, podemos substituí-los por um valor válido. Esse valor pode ser um único número como zero ou pode ser algum tipo de inserção ou interpolação de valores. Podemos fazer isso usando o método isnull () como uma máscara, mas como essa é uma operação muito comum, o Pandas fornece o método fillna(), que retorna uma cópia da matriz com os valores nulos substituídos.    fillna()        Retorna uma cópia dos dados com valores preenchidos<jupyter_code># Criando uma série
data = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))
data
# Preenchendo valores NA com zero:
data.fillna(0)
# Para um DataFrame as opções são similares
df2 = pd.DataFrame({'A': [1, 2, 3, np.nan, 5], 'B': [6, 7, 8, 9, 10]})
df2
# Preenchendo o valor nulo com a média da coluna
df3 = pd.DataFrame(df2['A'].fillna(df2['A'].mean()))
df3
# Utilizando o foward fill para propagar o valor anterior
df2.fillna(method='ffill', axis=0)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0900287882753206, 'fraction_numerical': 0.012823868097356713, 'mean_word_length': 5.184466019417476, 'pattern_counts': {'":': 0, '<': 28, '<?xml version=': 0, '>': 28, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '153955', 'license': 'MIT', 'n_tokens_mistral': 1380, 'n_tokens_neox': 1334, 'n_words': 449, 'path': 'Python/03 Pandas/03. Missing Data.ipynb', 'repo_name': 'rdemarqui/Data-Science-B-sico', 'size': '3821'}