import pandas as pd
import numpy as np
import datetime
data = {
"produto": ["Produto A", "Produto B", "Produto C", "Produto A", "Produto D",
"Produto C", "Produto B", "Produto E", "Produto D", "Produto A",
"Produto C", "Produto B", "Produto D", "Produto A", "Produto B",
"Produto E", "Produto C", "Produto A", "Produto B", "Produto D"],
"quantidade": [10, 5, 8, 3, '-', 2, 2, 4, 9, None, 3, 8, 2, None, 6, 10, 4, 5, 8, 9],
"data_venda": ["23-01-03", "2023-02-15", "2-03-20", "2023-04-10", "2023-05-05",
"2023-06-18", "23/07/22", "3-08-12", "2023-09-07", "2023-10-09",
"23-11-25", "2023/12/14", "2023-01-28", "2023-02-09", "2023-03-01",
"2023-04-22", "2023-05-19", "2023-06-30", "2023-07-11", "2023-08-25"]
}
df = pd.DataFrame(data)
df
Run to view results
Normalizar e validar registros de data e quantidade
def validar_data(dt_input):
try:
if pd.notna(dt_input):
if (len(dt_input) == 8) & ('/' in dt_input):
dt_result = datetime.datetime.strptime(dt_input, '%y/%m/%d')
dt_valid = True
elif (len(dt_input) == 8) & ('-' in dt_input):
dt_result = datetime.datetime.strptime(dt_input, '%y-%m-%d')
dt_valid = True
elif (len(dt_input) == 10) & ('/' in dt_input):
dt_result = datetime.datetime.strptime(dt_input, '%Y/%m/%d')
dt_valid = True
elif (len(dt_input) == 10) & ('-' in dt_input):
dt_result = datetime.datetime.strptime(dt_input, '%Y-%m-%d')
dt_valid = True
else:
dt_result = None
dt_valid = False
else:
dt_result = None
dt_valid = False
return dt_valid, dt_result
except ValueError:
return False, None
Run to view results
def validar_quantidade(qtd_input):
try:
if pd.notna(qtd_input):
qtd_input = int(qtd_input)
if 0 <= qtd_input <= 1000:
qtd_valid = True
qtd_clean = qtd_input
else:
qtd_valid = False
qtd_clean = None
else:
qtd_valid = False
qtd_clean = None
return qtd_valid, qtd_clean
except ValueError:
return False, None
Run to view results
Testar as funções
df_cleaned = df.copy()
list_venda_valida = []
list_venda_clean = []
list_qtd_valida = []
list_qtd_clean = []
for index,linha in df_cleaned.iterrows():
data_venda_valida, data_venda_clean = validar_data(linha['data_venda'])
list_venda_valida.append(data_venda_valida)
list_venda_clean.append(data_venda_clean)
df_cleaned['data_venda_valida'] = list_venda_valida
df_cleaned['data_venda_clean'] = list_venda_clean
for index,linha in df_cleaned.iterrows():
qtd_valida, qtd_clean = validar_quantidade(linha['quantidade'])
list_qtd_valida.append(qtd_valida)
list_qtd_clean.append(qtd_clean)
df_cleaned['quantidade_valida'] = list_qtd_valida
df_cleaned['quantidade_clean'] = list_qtd_clean
quantidades_falso = len(df_cleaned[df_cleaned['quantidade_valida'] == False])
datas_falso = len(df_cleaned[df_cleaned['data_venda_valida'] == False])
print(f'{quantidades_falso} registros com quantidade inválida')
print(f'{datas_falso} registros com data_venda inálida')
df_cleaned
Run to view results