-
Notifications
You must be signed in to change notification settings - Fork 0
/
limpieza_y_validacion_pandas.py
89 lines (66 loc) · 2.28 KB
/
limpieza_y_validacion_pandas.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import pandas as pd
import numpy as np
def readDataframe(df):
"""
Lectura de archivos parquet. Retorna un dataframe pyspark
"""
df = df.drop(["DeviceId", "Sistema", "Timestamp", "TimestampUTC", "IdVerificacion"], axis = 1)
df = df.rename(columns={'DispositivoId': 'dispositivoId',\
'Nombre': 'parametro',\
'Valor': 'valor',\
'Unidad': 'unidad',\
'EstampaTiempo': 'fecha'})
return df
def typeDF(pandasDF, typeData):
"""
Separa dataframes por tipos de dato crudo, calibrado y validado. Retorna un dataframe
"""
df = None
if typeData == "Crudo":
# IMPORTANTE CORREGIR VALORES EN DB
df = pandasDF[pandasDF["Crudo"] == "DC "].drop(["Calibraciones", "Validados"], axis = 1)
elif typeData == "Calibraciones":
df = pandasDF[pandasDF["Calibraciones"] == "DP"].drop(["Crudo", "Validados"], axis = 1)
elif typeData == "Validados":
df = pandasDF[pandasDF["Validados"] == "DV"].drop(["Crudo", "Calibraciones"], axis = 1)
else:
print("typeData invalido")
return df
def exploreValues(df, colList, attr=None):
"""
Exploración de categorías de las columnas a excepción de valor y fecha. Retorna un diccionario.
"""
res, result = {}, None
if attr is None:
for column in colList:
if column in ["valor", "fecha"]: pass
else:
res[column] = df[column].unique()
result = res
else:
try:
result = df[column].unique()
except:
res[attr] = str(attr) + " doesn't exists"
result = res
return result
def cleanDF(df):
"""
Limpieza de NaN y duplicados. Retorna un dataframe
"""
df = df.dropna()
df = df.drop_duplicates()
for cols in ['Crudo', 'Calibraciones', 'Validados']:
if cols not in df.columns:
df[cols] = np.nan
return df
def returnDF(pandasDF, typeData):
"""
Proceso completo. Devuelve el dataframe "crudo"
"""
tmpDF = readDataframe(pandasDF)
typeFilter = typeDF(tmpDF, typeData)
cleanedDF = cleanDF(typeFilter)
return cleanedDF
# ejemplo
# returnDF(dataframe, "Validados")