<jupyter_start><jupyter_text>Valores Nulos<jupyter_code>import numpy as np
import pandas as pd
file = "..\\Curso Uni_dados_Dta_Science\\ufo.csv"
ufo = pd.read_csv(file)
ufo.head()
ufo.tail()<jupyter_output><empty_output><jupyter_text>NaN não é uma STRING. Ele é um valor especial no Numpy: numpy.nan É comum a referência "Not a number", que significa "missing value" O método read_csv detecta valores nulos automaticamente e preenche com NaN na leitura do arquivo  O isnull() re torna um Dataframe booleano, onde True indica valor nulo e False valor preenchido<jupyter_code># No arquivo null os valores impares são nulos

file="..\\Curso Uni_dados_Dta_Science\\nulos.csv"
nulos=pd.read_csv(file)
nulos.isnull().tail()
ufo.isnull().tail()<jupyter_output><empty_output><jupyter_text>notnull() é exatamente o oposto do is null()<jupyter_code>nulos.notnull().tail()
ufo.notnull().tail()<jupyter_output><empty_output><jupyter_text>E como saber a quantidade de valores nulos em uma coluna<jupyter_code>ufo.isnull().sum()<jupyter_output><empty_output><jupyter_text>Como o isnull().sum() funciona?Lembra que o isnull() retorna verdadeiro ou falso? O retorno verdadeiro ou falso é convertido pelo pandas em 0 para falso e 1 para verdadeiro.Então o método sum() agrega os valores das colunas, pois ele opera por padraão no eixo 0.  Construindo um filtro com valores nulos<jupyter_code># Estamos verificando as linhas em que aoluna City possua valor nulo.

ufo[ufo.City.isnull()].head(20)
# Numero de linhas e colunas

A = ufo.shape
A<jupyter_output><empty_output><jupyter_text>dropna() any - Se qualquer valor estiver falatando na linha, então dropna() APAGA a linha<jupyter_code>B = ufo.dropna(how='any').shape
B
# O retorno do shape é uma tupla

print('Deletadas ' + str((A[0] - B[0])) + ' linhas com valores nulos')
# o inplace também é parâmetro do dropna() e é falso por padrão.

ufo.dropna(how='any').shape
# As linhas com NaN continuam no Dataframe

ufo.shape<jupyter_output><empty_output><jupyter_text>all - Caso todos os valores de uma linha sejam nulos, ela será deletada<jupyter_code>ufo.dropna(how='all').shape<jupyter_output><empty_output><jupyter_text>Utilizando o dropna com parâmetros  O parametro subset recebeuma lista<jupyter_code># Estamos criando um subsetcom City e Shape Reported. Se houver qualquer valor nulo nessas colunas, a linha será deletada.

ufo.dropna(subset=['City', 'Shape Reported'], how='any').shape
# Se todos os valores forem nulos em City ou Shape reported, as linhas serão deletadas

ufo.dropna(subset=['City', 'Shape Reported'], how='all').shape<jupyter_output><empty_output><jupyter_text>Como trabalhar o parâmetro how()o any funciona como um or ou |o all funciona como um and ou &  value_counts realiza um count, porém não conta os valores NaN<jupyter_code>ufo['Shape Reported'].value_counts().head()
ufo['Shape Reported'].value_counts(dropna=False).head()
# Podemos ainda, preencher o valores que estão faltando

ufo['Shape Reported'].fillna(value='DIVERSOS', inplace=True)
# Confirmando a contagem incluindo o valor DIVERSOS

ufo['Shape Reported'].value_counts().head()<jupyter_output><empty_output><jupyter_text>E a coca cola?<jupyter_code>arquivo = "..\\Curso Uni_dados_Dta_Science\\sanduiches.txt"
vendas = pd.read_table(arquivo)
vendas.head()
vendas.shape
ordens = vendas.dropna(subset=['choice_description'], how='any')
ordens.shape
ordens.head(10)
ordens.choice_description.str.contains('Coke').astype(int).sum()<jupyter_output><empty_output><jupyter_text>E quantos tem Guacamole?<jupyter_code>ordens.choice_description.str.contains('Guacamole').astype(int).sum()<jupyter_output><empty_output><jupyter_text>Quantos tem arroz?<jupyter_code>ordens.choice_description.str.contains('Rice').astype(int).sum()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1128476821192053, 'fraction_numerical': 0.0023841059602649007, 'mean_word_length': 6.883089770354906, 'pattern_counts': {'":': 0, '<': 49, '<?xml version=': 0, '>': 49, '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': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '327688', 'license': 'MIT', 'n_tokens_mistral': 1424, 'n_tokens_neox': 1393, 'n_words': 353, 'path': 'S16_A116 - Valores NaN.ipynb', 'repo_name': 'nelsonssjunior/Analise-exploratoria-com-python', 'size': '3775'}