<jupyter_start><jupyter_text>Etapa 3 - Transformação dos Dados<jupyter_code>import pandas as pd
import pandera as pa
#Criação do dataframe e checagem dos dados
valores_ausentes = "00/01/1900"
df = pd.read_csv("93f4e8c2-430f-4142-86b3-96dab4905b4e.csv", parse_dates=['data_inicio_primeiros_sintomas','data_notificacao','data_obito'], na_values=valores_ausentes)
df
#Alteração do tipo de dados da coluna 'etnia' para 'object'
df["etnia"] = df["etnia"].astype(object)
#Renomear a coluna '_id' para 'id'
df = df.rename(columns={"_id":"id"})
#Checar os tipos de dados
df.dtypes
#Criação de uma nova coluna de idade
df["Idade"] = df["idade"]
df.head(5)
#Substituição de idades com menos de 1 ano por 0
filtro = df.Idade.str.contains("mês|meses")
df.loc[filtro, ["Idade"]] = 0
df.head(5)
df.loc[df.Idade == "IGN"]
#Substituição de dados não informados da coluna 'Idade'
df.loc[df.Idade == "IGN", ["Idade"]] = 999
#Converter a coluna 'idade' para valores inteiros
df["Idade"] = df["Idade"].astype("float").astype("Int64")
#Converter os dados não informados da coluna 'Idade' para nulos
df.loc[df.Idade == 999, ["Idade"]] = pd.NA
df.dtypes
#Total de dados nulos por coluna
df.isna().sum()
#Validação dos dados
schema = pa.DataFrameSchema(
    columns = {
        "id": pa.Column(pa.Int),
        "sexo": pa.Column(pa.String),
        "idade": pa.Column(pa.String, nullable=True),
        "raca": pa.Column(pa.String, nullable=True),
        "etnia": pa.Column(pa.String, nullable=True),
        "morbidades_previas": pa.Column(pa.String, nullable=True),
        "outras_morbidades_previas": pa.Column(pa.String, nullable=True),
        "evolucao": pa.Column(pa.String, nullable=True),
        "data_inicio_primeiros_sintomas": pa.Column(pa.DateTime, nullable=True),
        "data_notificacao": pa.Column(pa.DateTime),
        "data_obito": pa.Column(pa.DateTime, nullable=True),
        "classificacao_final": pa.Column(pa.String),
        "Idade": pa.Column(pa.Int, nullable=True)
    }
)
schema.validate(df)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15566502463054188, 'fraction_numerical': 0.02167487684729064, 'mean_word_length': 4.737288135593221, 'pattern_counts': {'":': 14, '<': 5, '<?xml version=': 0, '>': 5, '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': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '77736', 'license': 'MIT', 'n_tokens_mistral': 813, 'n_tokens_neox': 783, 'n_words': 165, 'path': 'casos-graves-covid-19-recife/Etapa_3.ipynb', 'repo_name': 'Flavio-Varejao/Projeto-ETL-1', 'size': '2030'}