No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Manejo de Datos Faltantes en Pandas

16/32
Recursos

¿Cómo lidiar con valores faltantes en conjuntos de datos?

¿Alguna vez te has topado con un conjunto de datos lleno de valores ausentes? Estos pueden ser un verdadero rompecabezas originado por errores en la recolección de datos, problemas de almacenamiento, o simplemente por la falta de información al momento del registro. Ignorar estos vacíos puede llevar a conclusiones erróneas y malas decisiones empresariales. Aprender a identificar y gestionar los datos faltantes es fundamental para asegurar que nuestros análisis sean precisos y, sobre todo, significativos.

¿Cómo identificar datos faltantes en Pandas?

Pandas, una poderosa librería de Python para el análisis de datos, ofrece varias técnicas efectivas para detectar valores faltantes. Podemos consultar si un dato está disponible, si es nulo, y más. Aquí te mostramos cómo hacerlo con código:

import pandas as pd

# Ejemplo de dataset de retail
retail_data = pd.DataFrame({
    'Producto': ['A', 'B', 'C', 'D', None],
    'Cantidad': [10, None, 30, 40, 50],
    'Precio Unitario': [1.1, 2.2, 3.3, 4.4, 5.5]
})

# Método para identificar valores faltantes
datos_faltantes = retail_data.isnull()
print(datos_faltantes.head())

Al ejecutar este código, "True" indicará que el dato está faltante, y "False" indicará su presencia.

¿Qué estrategias existen para manejar datos faltantes?

Existen principalmente dos estrategias para tratar con los datos faltantes:

  1. Eliminación de filas o columnas: Puedes optar por eliminar por completo aquellas filas o columnas que contienen valores ausentes. Sin embargo, ten cuidado, ya que podrías perder información valiosa.

    # Eliminar filas con valores faltantes
    datos_sin_filas_faltantes = retail_data.dropna()
    print("Datos sin filas con valores faltantes:\n", datos_sin_filas_faltantes)
    
    # Eliminar columnas con valores faltantes
    datos_sin_columnas_faltantes = retail_data.dropna(axis=1)
    print("Datos sin columnas con valores faltantes:\n", datos_sin_columnas_faltantes)
    
  2. Imputación de valores: Otra opción es llenar los espacios con valores específicos, como un número constante, la media de la columna, o cualquier otro valor que consideres apropiado.

    • Llenar con un número constante, como el 0:

      # Llenar valores faltantes con 0
      retail_data_filled = retail_data.fillna(0)
      print(retail_data_filled)
      
    • Llenar con la media de la columna:

      # Calcular la media del Precio Unitario
      media_precio_unitario = retail_data['Precio Unitario'].mean()
      
      # Llenar valores faltantes con la media
      retail_data['Precio Unitario'].fillna(media_precio_unitario, inplace=True)
      print(retail_data)
      

¿Cuándo es conveniente eliminar o imputar datos?

La decisión de eliminar o imputar los valores faltantes depende del contexto del análisis y de los fines específicos del proyecto. Si una columna tiene apenas uno o dos datos faltantes, eliminar toda la columna no sería sabio. Del mismo modo, si una fila es crucial para el análisis, completar su información podría ser mejor que descartarla.

Reflexiona sobre estas estrategias y pregúntate: ¿Cuándo resulta beneficioso eliminar filas o columnas, o quizá llenar los valores faltantes? Tu respuesta es clave para lograr un análisis más riguroso y acertado.

En conclusión, el manejo adecuado de los valores faltantes es crucial al momento de analizar un conjunto de datos. Al comprender y dominar diversas estrategias dentro de Pandas, estarás más preparado para garantizar que los resultados de tu análisis de datos sean confiables y exactos. ¡Continúa aprendiendo y afinando tus habilidades en el fascinante mundo del análisis de datos!

Aportes 22

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

El manejo de \*\*datos faltantes\*\* es una de las tareas más comunes cuando se trabaja con conjuntos de datos en \*\*Pandas\*\*. Los valores faltantes suelen estar representados como `NaN` (Not a Number) en los DataFrames de Pandas, y hay varias formas de \*\*identificar, eliminar o imputar\*\* estos valores según las necesidades del análisis. Aquí te muestro las principales técnicas y funciones para gestionar los datos faltantes: \--- \### 1. \*\*Identificación de Datos Faltantes\*\* Para identificar valores faltantes en un DataFrame o Serie de Pandas, puedes utilizar los siguientes métodos: \#### \*\*`isnull()` y `notnull()`\*\* \- \*\*`isnull()`\*\*: Devuelve `True` para cada celda que contenga un valor nulo (`NaN`). \- \*\*`notnull()`\*\*: Devuelve `True` para cada celda que \*\*no\*\* sea nula. ```python import pandas as pd import numpy as np \# Crear un DataFrame con valores faltantes data = {'Nombre': \['Ana', 'Luis', np.nan], 'Edad': \[23, np.nan, 36], 'Ciudad': \['Madrid', 'Barcelona', 'Valencia']} df = pd.DataFrame(data) \# Identificar valores faltantes print(df.isnull()) \# Identificar valores que no son faltantes print(df.notnull()) ``` \--- \### 2. \*\*Eliminación de Datos Faltantes\*\* Si decides eliminar las filas o columnas con datos faltantes, Pandas ofrece varias formas de hacerlo. \#### \*\*`dropna()`\*\* Este método elimina filas o columnas que contienen valores nulos. ```python \# Eliminar todas las filas que tienen al menos un valor faltante df\_sin\_na\_filas = df.dropna() \# Eliminar columnas que tienen al menos un valor faltante df\_sin\_na\_columnas = df.dropna(axis=1) \# Eliminar solo las filas en las que todos los valores son nulos df\_sin\_na\_filas\_todos = df.dropna(how='all') \# Eliminar filas solo si tienen más de un valor nulo df\_sin\_na\_thresh = df.dropna(thresh=2) ``` \- `axis=0`: Elimina las filas (esto es predeterminado). \- `axis=1`: Elimina las columnas. \- `how='any'`: Elimina la fila o columna si \*\*cualquier\*\* valor es nulo (por defecto). \- `how='all'`: Elimina la fila o columna si \*\*todos\*\* los valores son nulos. \- `thresh=N`: Requiere que la fila o columna tenga al menos `N` valores no nulos para no ser eliminada. \--- \### 3. \*\*Rellenar Datos Faltantes\*\* En lugar de eliminar los datos, a veces es mejor \*\*rellenar\*\* los valores faltantes con una aproximación. Esto es conocido como \*\*imputación de datos\*\*. \#### \*\*`fillna()`\*\* Rellena los valores nulos con un valor específico. ```python \# Rellenar los valores faltantes con un valor constante df\_rellenado = df.fillna(0) \# Rellenar los valores faltantes con el valor anterior (forward fill) df\_forward\_fill = df.fillna(method='ffill') \# Rellenar los valores faltantes con el valor siguiente (backward fill) df\_backward\_fill = df.fillna(method='bfill') \# Rellenar los valores faltantes con la media de una columna df\['Edad'] = df\['Edad'].fillna(df\['Edad'].mean()) ``` \- `method='ffill'`: Propaga el último valor conocido hacia adelante. \- `method='bfill'`: Propaga el siguiente valor conocido hacia atrás. \- `value`: Puedes asignar cualquier valor constante, como `0` o una cadena. \--- \### 4. \*\*Reemplazar Datos Faltantes con Métodos Estadísticos\*\* A veces es más efectivo reemplazar los valores faltantes con la \*\*media, mediana o moda\*\* de una columna, especialmente cuando trabajas con variables numéricas. \#### \*\*Imputación con Media, Mediana o Moda\*\* ```python \# Rellenar los valores faltantes con la media de una columna df\['Edad'] = df\['Edad'].fillna(df\['Edad'].mean()) \# Rellenar los valores faltantes con la mediana de una columna df\['Edad'] = df\['Edad'].fillna(df\['Edad'].median()) \# Rellenar los valores faltantes con la moda de una columna df\['Edad'] = df\['Edad'].fillna(df\['Edad'].mode()\[0]) ``` \- \*\*Media (`mean`)\*\*: Útil cuando los datos son distribuidos normalmente. \- \*\*Mediana (`median`)\*\*: Mejor para datos con distribuciones asimétricas o con outliers. \- \*\*Moda (`mode`)\*\*: Se usa más en datos categóricos. \--- \### 5. \*\*Interpolar Datos Faltantes\*\* En casos donde los datos tienen una relación temporal o secuencial, puedes usar la interpolación para estimar los valores faltantes. \#### \*\*`interpolate()`\*\* Calcula valores intermedios para los valores nulos. ```python \# Interpolación de valores faltantes linealmente df\_interpolado = df\['Edad'].interpolate() ``` \--- \### 6. \*\*Detectar Columnas con Muchos Datos Faltantes\*\* En ciertos casos, puede que desees eliminar o investigar columnas que tengan muchos valores faltantes. Puedes detectar fácilmente estas columnas con: ```python \# Contar valores faltantes por columna missing\_data = df.isnull().sum() \# Mostrar columnas con más de un valor faltante print(missing\_data\[missing\_data > 1]) ``` \--- \### 7. \*\*Modificar el DataFrame con Datos Faltantes\*\* Algunas veces es útil modificar el DataFrame original para cambiar cómo Pandas maneja los datos faltantes. \#### \*\*`replace()`\*\* Te permite reemplazar valores específicos (incluidos los `NaN`). ```python \# Reemplazar valores NaN con un valor específico df\_reemplazado = df.replace(np.nan, 'Desconocido') ``` \--- \### Resumen \- \*\*Identificación de datos faltantes\*\*: Con `isnull()` y `notnull()`. \- \*\*Eliminación de datos faltantes\*\*: Usando `dropna()` para eliminar filas o columnas. \- \*\*Rellenar datos faltantes\*\*: Con `fillna()`, usando valores constantes, estadísticos o propagación de valores. \- \*\*Interpolación\*\*: Rellenar secuencialmente usando `interpolate()`. \- \*\*Reemplazo\*\*: Usando `replace()` para sustituir los valores `NaN` con otros valores. El manejo adecuado de los datos faltantes asegura que los análisis sean precisos y las conclusiones sean más confiables.
Cuando son datos numéricos se puede imputar con el promedio, siempre que no haya outliers. En caso de existir muchos outliers lo ideal es imputarlos con la media.
Con respecto a los valores faltantes, analice los diferentes valores y logre eliminar algunos y rellenar otros.: 1-En la columna "Description"---> data\['Description'].fillna("No description", inplace=True) 2- Elimine los registros donde 'UnitPrice' = 0 3- En la columna donde 'CustomerID' = Nan use esta función----> data\_cleaned\['CustomerID'].fillna('No Registered Customer', inplace=True)
# Cómo afectan lo valores nulos a la estadística de datos? ### **Reducción del Tamaño de la Muestra:** * Muchas funciones estadísticas en Pandas (como `.mean()`, `.sum()`, `.std()`, etc.) **excluyen automáticamente los valores nulos**. * Esto reduce el tamaño efectivo de la muestra, lo que puede disminuir la precisión de los resultados. **Ejemplo:** `import pandas as pd` `import numpy as np` `# Crear una Serie con valores nulos` `data = pd.Series([1, 2, np.nan, 4, 5])` `# Calcular la media` `mean_value = data.mean()` `print(mean_value) # Salida: 3.0 (solo considera 1, 2, 4, 5)` ### **Sesgo en los Resultados:** * Si los valores nulos no están distribuidos aleatoriamente (es decir, si hay un patrón en los datos faltantes), los resultados estadísticos pueden estar **sesgados**. * Por ejemplo, si los valores faltantes tienden a ocurrir en ciertos grupos o condiciones, las conclusiones pueden no ser representativas de la población completa. ### **Problemas en Cálculos Específicos:** * Algunas operaciones, como `.cumsum()` o `.diff()`, propagan los valores nulos, lo que puede afectar cálculos posteriores. * Otras funciones, como `.corr()` (correlación), excluyen automáticamente pares de valores nulos, lo que puede reducir la cantidad de datos disponibles para el análisis. ## **¿Cómo Manejar Valores Nulos en Análisis Estadísticos?** ### **Eliminar valores nulos:** * Usa `.dropna()` para eliminar filas o columnas con valores nulos. * **Ventaja**: Simplifica el análisis al trabajar solo con datos completos. * **Desventaja**: Puedes perder información valiosa si los valores nulos no son aleatorios. **Ejemplo:** `data_cleaned = data.dropna()` `print(data_cleaned) # Salida: 1, 2, 4, 5` ### **Rellenar valores nulos:** * Usa `.fillna()` para reemplazar valores nulos con un valor específico (como la media, la mediana, o un valor constante (0) ). * **Ventaja**: Mantienes el tamaño de la muestra. * **Desventaja**: Puedes introducir sesgos si el valor de reemplazo no es adecuado. **Ejemplo:** `# Rellenar con la media` `mean_value = data.mean()` `data_filled = data.fillna(mean_value)` `print(data_filled) # Salida: 1, 2, 3, 4, 5` ### **Interpolar valores nulos:** * Usa `.interpolate()` para interpolar valores nulos basándose en otros valores cercanos. * **Ventaja**: Útil para datos secuenciales o series temporales. * **Desventaja**: Puede no ser apropiado para datos no secuenciales. **Ejemplo:** `data_interpolated = data.interpolate()` `print(data_interpolated) # Salida: 1, 2, 3, 4, 5` ### **Usar métodos robustos:** * Algunas funciones estadísticas tienen parámetros para manejar valores nulos. Por ejemplo: * `.mean(skipna=True)` (por defecto) excluye valores nulos. * `.mean(skipna=False)` incluye valores nulos, lo que puede dar resultados no deseados. * ## **Ejemplo práctico: Análisis con y sin valores nulos** ### **Datos con valores nulos:** `data = pd.Series([1, 2, np.nan, 4, 5])` ### **Análisis sin manejar valores nulos:** `print(data.mean()) # Salida: 3.0 (excluye NaN)` `print(data.std()) # Salida: 1.58 (excluye NaN)` ### **Análisis rellenando valores nulos:** `data_filled = data.fillna(data.mean())` `print(data_filled.mean()) # Salida: 3.0` `print(data_filled.std()) # Salida: 1.41` ## **Consideraciones Adicionales** * **Patrones de datos faltantes**: Investiga si los valores nulos siguen un patrón (por ejemplo, si están relacionados con otra variable). * **Imputación avanzada**: En casos complejos, puedes usar técnicas de imputación avanzada, como la regresión o métodos de machine learning.
📝 Mis apuntes de esta clase: **Datos Faltantes** Los datos faltantes, por lo general son valores nulos o bien valores que están fuera de rango (según la variable). Los datos pueden faltar en nuestro dataset por varias razones: \- Datos no disponibles a la hora de la recolección. \- Errores durante el almacenamiento. \- Errores en la recolección. Durante el proceso de limpieza de datos se les da tratamiento a los valores faltantes, que pueden ser: \- Imputación (rellenar los faltantes con valores conocidos, ej: media, mediana) \- Eliminación Para buscar valores faltantes pandas nos provee dos funciones: 1. **isna()** 2. **isnull()** Ambdas funciones regresan un DataFrame booleano, donde: * **False**: El dato NO es faltante. * **True**: El dato SI es faltante. Al DataFrame resultante podemos aplicarle la función **sum()** y obtendremos una **Serie** con el conteo (sumatoria) de los valores en **True**, el índice de la serie es el nombre de la columna. ```python # Cuantos faltantes tenemos en total? total_missing = retail_df.isna().sum().sum() print(f"Total de valores faltantes: {total_missing}") # Cuantos faltantes tenemos por columna? total_missing_column = retail_df.isnull().sum() print("Total de valores faltantes por cada columna:\n", total_missing_column) # Cual es la proporción de faltatantes respecto a total de registros? lenght = retail_df.shape[0] column_proportion = round((total_missing_column[total_missing_column > 0] / lenght) * 100, 2) total_proportion = round((total_missing / lenght) * 100, 2) print(f"\nProporción total de faltantes: {total_proportion}") print("Proporción de faltantes por columna:\n", column_proportion) ``` Resultado: ```txt Total de valores faltantes: 136534 Total de valores faltantes por cada columna: InvoiceNo 0 StockCode 0 Description 1454 Quantity 0 InvoiceDate 0 UnitPrice 0 CustomerID 135080 Country 0 dtype: int64 Proporción total de faltantes: 25.2 Proporción de faltantes por columna: Description 0.27 CustomerID 24.93 dtype: float64 ``` En en análisis podemos observar que el 25.2% del DataFrame corresponde a datos faltantes, de los cuales solo el 0.27% corresponden a la columna **Description** y el resto al **CustomerID**. Para el caso de la columna **Description** podemos eliminar los registros con datos faltantes dado que la proporción es mínima. Sin embargo eliminar el 24.93% de datos faltantes en **CustomerID** conllevaría una perdida de información considerable, por lo tanto es mejor proceder a imputar dichos valores faltantes. **Eliminar datos faltantes** La función **drona()** elimina datos faltantes tanto de un DataFrame como de una Serie, la función por si sola (sin parámetros ) devuelve un DataFrame/Serie sin los registros que tengan algún valor faltante, sin embargo podemos enviar una serie de parámetros para modificar este resultado. Parámetros: * **axis**: 0 (default) para eliminar filas, 1 para eliminar columnas. * **how**: "any" (default) elimina la fila/columna si encuentra algún valor faltante, "all" elimina la fila/columna si y solo si todos los elementos son faltantes. * **subset**: Lista de columnas a evaluar si cuentan con nulos. * **inplace**: **False** (default) no modifica el DataFrame/Serie pero retorna uno nuevo sin los faltantes, **True** modifica el DataFrame/Serie y no retorna nada. Análisis de datos donde **Description** tiene valores faltantes. ```python data_description_na = retail_df[retail_df["Description"].isna()] quantity_less_0 = data_description_na[data_description_na["Quantity"] < 0].shape[0] print(f"Total de datos de 'Quantity' menor a 0: {quantity_less_0}") print("Valores de 'UnitPrice': ", data_description_na["UnitPrice"].unique()) print("Valores de 'CustomerID': ", data_description_na["CustomerID"].unique()) ``` Resultado: ```txt Total de datos de 'Quantity' menor a 0: 862 Valores de 'UnitPrice': [0.] Valores de 'CustomerID': [nan] ``` Las columnas **CustomerID**, **UnitPrice** y **Quantity** cuando **Description** es null (valor faltante) son a su vez faltantes y negativos, por lo tanto podemos concluir que eliminar los registros donde **Description** es null no incurrirá en análisis sesgados o con interpretaciones erróneas. ```python # Eliminamos las filas con valores faltantes solo en la columna "Description" y modificamos el DataFrame retail_df.dropna(subset=["Description"], inplace=True) retail_df.isna().sum() ``` Resultado: ```txt InvoiceNo 0 StockCode 0 Description 0 Quantity 0 InvoiceDate 0 UnitPrice 0 CustomerID 133626 Country 0 dtype: int64 ``` **Imputar datos faltantes** Pandas incluye funciones para imputar datos faltantes a partir de un dato conocido. Funciones: * **ffill()**: Forward Fill o llenado hacia adelante, rellena los valores faltantes (NA/NaN) a partir del último dato valido hasta el siguiente dato valido. * **bfill()**: Backward Fill o llenado hacia atrás, rellena los valores faltantes (NA/NaN) a partir del siguiente dato valido hasta rellenar los datos faltantes que están detrás. Ambas funciones reciben el parámetro **inplace** para indicarle a pandas si modifica o no el DataFrame original. Para la columna **CustomerID** aplicaré la función **ffill**. ```python retail_df["CustomerID"].ffill(inplace=True) retail_df.isna().sum() ``` Resultado: ```txt InvoiceNo 0 StockCode 0 Description 0 Quantity 0 InvoiceDate 0 UnitPrice 0 CustomerID 0 Country 0 dtype: int64 ``` Espero este aporte les sea de utilidad.
Para mi concepto, sería mejor imputar por la mediana, ya que por la media, dan valores muy extremos y podría generar overfiting en los modelos de machine learning
Eliminar filas o columnas con datos faltantes es una decisión importante y debe tomarse cuidadosamente, ya que puede afectar significativamente la calidad y representatividad de los datos. Aquí te doy algunos escenarios clave en los que **es importante eliminar filas o columnas con datos inexistentes** (nulos o `NaN`): ### **1. Cuando el porcentaje de datos faltantes es alto y la información no es crítica** * Si una columna o fila tiene una gran cantidad de valores faltantes (por ejemplo, más del 50%), y no es fundamental para el análisis, podría ser preferible eliminarla. Mantener una columna con la mayoría de sus datos faltantes podría añadir ruido o distorsionar el análisis.**Por qué eliminarla**: La columna o fila ofrece muy poca información útil. Si intentas imputar los valores, podrías generar valores falsos que sesguen el análisis.pythonCopiar código`# Eliminar columnas con más del 50% de valores faltantes` `threshold = len(df) * 0.5` `df.dropna(thresh=threshold, axis=1, inplace=True`) ### **2. Cuando la columna o fila es irrelevante para el análisis** * Si una columna o fila no tiene valor analítico para la tarea que estás realizando, y además tiene valores faltantes, es una buena práctica eliminarla. Esto reduce la complejidad y el tamaño del conjunto de datos sin pérdida de información clave.**Por qué eliminarla**: Las columnas o filas irrelevantes pueden agregar complejidad innecesaria y dificultar el análisis o los modelos de machine learning.pythonCopiar código`# Si una columna como 'Dirección' es irrelevante para el análisis` `df.drop(['Dirección'], axis=1, inplace=True`) ### **3. Cuando los datos faltantes son aleatorios y no tienen un patrón identificable** * Si los datos faltantes son aleatorios y no están correlacionados con ninguna otra variable importante, podrías eliminar las filas o columnas afectadas. La presencia de valores faltantes sin patrón puede ser irrelevante o incluso perjudicial si se imputan de manera incorrecta.**Por qué eliminarla**: Imputar valores en casos donde los datos faltantes no siguen ningún patrón puede introducir sesgos o información incorrecta. Si los datos faltantes son aleatorios, eliminarlos suele ser la opción más segura.pythonCopiar código`# Eliminar filas con cualquier valor faltante` `df.dropna(inplace=True`) ### **4. Cuando hay pocos datos faltantes y la muestra es lo suficientemente grande** * Si el porcentaje de datos faltantes es muy pequeño en comparación con el tamaño total de los datos (por ejemplo, menos del 5%), y eliminar esas filas o columnas no afectará significativamente el análisis o las conclusiones, podrías optar por eliminarlos.**Por qué eliminarla**: En estos casos, la eliminación de las filas o columnas con datos faltantes no afectará el poder estadístico del análisis, y te aseguras de trabajar solo con datos completos.pythonCopiar código`# Si las filas con valores faltantes representan menos del 5% de los datos` df = df.dropna() ### **5. Cuando los datos faltantes son en columnas no imputables (no se pueden completar de forma confiable)** * En algunas situaciones, ciertos datos no pueden ser rellenados de manera confiable, especialmente en columnas con datos cualitativos o categóricos (como nombres o direcciones). En estos casos, si faltan valores, es mejor eliminarlos.**Por qué eliminarla**: Imputar valores en columnas no imputables (como nombres o categorías únicas) puede introducir errores o sesgos significativos. En estos casos, es más seguro eliminar los datos faltantes.pythonCopiar código`# Eliminar filas si la columna 'Nombre' contiene NaN, ya que no es imputable de forma confiable` `df.dropna(subset=['Nombre'], inplace=True`) ### **6. Cuando las filas con datos faltantes corresponden a datos irrelevantes o redundantes** * Si las filas con datos faltantes corresponden a registros redundantes o irrelevantes para el análisis (por ejemplo, datos históricos obsoletos o categorías con muy baja frecuencia), eliminarlas no afectará la calidad del análisis.**Por qué eliminarla**: Los datos irrelevantes o redundantes pueden añadir complejidad innecesaria al análisis o modelo, y si además tienen datos faltantes, es una señal para eliminarlos.pythonCopiar código`# Eliminar filas que pertenecen a categorías poco frecuentes y tienen datos faltantes` `df = df[df['Categoría'].value_counts() > 10`] ### **7. Cuando los datos faltantes provienen de errores de registro** * Si los datos faltantes son el resultado de errores de registro o de entrada de datos, especialmente en sistemas automatizados, es mejor eliminarlos. Por ejemplo, si los valores faltantes provienen de problemas técnicos (sensores defectuosos, errores de entrada, etc.), esos datos no son confiables.**Por qué eliminarla**: Los datos incorrectos o incompletos debido a errores de registro no aportarán valor al análisis y pueden generar conclusiones erróneas si se imputa de manera incorrecta.pythonCopiar código`# Eliminar filas con datos faltantes debido a errores de sensores` `df.dropna(subset=['Sensor_1'], inplace=True`) ### **8. Cuando estás creando un modelo que no admite datos faltantes** * Algunos algoritmos de machine learning no pueden manejar datos faltantes directamente (por ejemplo, árboles de decisión, SVM, redes neuronales). En estos casos, es importante eliminar las filas o columnas con valores faltantes si no es posible imputarlos de manera segura.**Por qué eliminarla**: Mantener datos faltantes en un conjunto de datos que va a ser usado por un modelo que no los admite puede causar errores o resultados inexactos.pythonCopiar código`# Eliminar todas las filas con valores faltantes antes de entrenar el modelo` `df.dropna(inplace=True`) ### **Cuándo NO eliminar datos faltantes** 1. **Cuando los valores faltantes son sistemáticos o tienen un patrón**: Si los valores faltantes siguen un patrón (por ejemplo, están correlacionados con otras variables), eliminarlos puede introducir sesgos. En estos casos, es mejor **imputar** los valores faltantes. 2. **Cuando la pérdida de datos eliminaría información importante**: Si las filas o columnas con valores faltantes contienen información relevante para el análisis, eliminarlas podría reducir la capacidad predictiva de un modelo o la precisión de un análisis. 3. **Cuando los valores faltantes son pocos pero críticos**: Si las columnas con datos faltantes contienen valores muy importantes para el análisis (como etiquetas en un problema de clasificación), es mejor intentar imputar o recolectar los datos faltantes antes de eliminarlos. ### **Conclusión** Eliminar filas o columnas con datos faltantes puede ser importante en situaciones donde los datos son irrelevantes, están presentes en una cantidad considerable o son difíciles de imputar de forma confiable. Sin embargo, la decisión siempre debe estar guiada por el impacto que tendrá sobre el análisis general y la calidad de los datos.
Creo que llenarlo con la media solo aplica si al calcular la media inicial los None no se tienen en cuenta dentro del denominador de la media
Para saber si se debe prescindir de algún dato, pienso que es importante saber primero lo que se busca, y también que eventos anormales (como fallos de energía o eventos ajenos a los procesos normalmente), son los causantes de estas alteraciones o valores nulos. Este sería a groso modo un criterio que tendría para saber si se deben eliminar o realizar algún proceso.
#### **1. Identificación de Datos Faltantes** missing\_data = retail\_data.isna() print(missing\_data) **Descripción**: * El método isna() identifica valores faltantes (NaN) en el conjunto de datos y devuelve un DataFrame con los mismos valores en formato booleano (True o False). * print(missing\_data) muestra este DataFrame. **Resultado Esperado**: Un DataFrame con True para los valores faltantes y False para los valores presentes. #### **2. Visualización de Datos Faltantes para las Primeras Filas** print(missing\_data.head()) **Descripción**: * Muestra las primeras cinco filas del DataFrame missing\_data generado en el paso anterior. **Resultado**: Una tabla booleana (True/False) indicando la presencia o ausencia de datos faltantes para las primeras cinco filas. #### **3. Conteo de Valores Faltantes por Columna** missing\_data\_count = retail\_data.isna().sum() print('Conteo de datos faltantes por columna:\n', missing\_data\_count) **Descripción**: * El método isna() verifica valores faltantes, y sum() calcula el número total de valores faltantes en cada columna. * missing\_data\_count contiene el conteo de valores faltantes por columna, y se imprime. **Resultado**: Una serie con nombres de columnas y conteo de valores faltantes, como: InvoiceNo       0 StockCode       0 Description  1454 ... #### **4. Eliminación de Filas con Valores Faltantes** no\_missing\_rows = retail\_data.dropna() print('Datos sin filas con valores faltantes:\n', no\_missing\_rows) **Descripción**: * dropna() elimina todas las filas con valores faltantes del conjunto de datos. * El conjunto resultante (no\_missing\_rows) se imprime. **Resultado Esperado**: Un DataFrame donde se excluyen todas las filas que contienen valores faltantes. #### **5. Eliminación de Columnas con Valores Faltantes** no\_missing\_columns = retail\_data.dropna(axis=1) print('Datos sin columnas con valores faltantes:\n', no\_missing\_columns) **Descripción**: * dropna(axis=1) elimina todas las columnas con valores faltantes del conjunto de datos. * El conjunto resultante (no\_missing\_columns) se imprime. **Resultado Esperado**: Un DataFrame donde se excluyen todas las columnas que contienen valores faltantes. #### **6. Reemplazo de Valores Faltantes con Ceros** retail\_data\_fillef\_zeros = retail\_data.fillna(0) retail\_data\_fillef\_zeros\_count = retail\_data\_fillef\_zeros.isna().sum() print(retail\_data\_fillef\_zeros\_count) **Descripción**: * fillna(0) reemplaza todos los valores faltantes en el conjunto de datos con el valor 0. * Se recalcula el conteo de valores faltantes en retail\_data\_fillef\_zeros usando isna().sum() y se imprime. **Resultado**: Una serie con 0 valores faltantes para todas las columnas, confirmando que los NaN han sido reemplazados por ceros. #### **7. Reemplazo de Valores Faltantes con el Promedio** mean\_unit\_price = retail\_data\['UnitPrice'].mean() retail\_data\_filled\_mean = retail\_data\['UnitPrice'].fillna(mean\_unit\_price) print(retail\_data\_filled\_mean) **Descripción**: * Se calcula el valor promedio de la columna UnitPrice usando mean(). * fillna(mean\_unit\_price) reemplaza los valores faltantes en la columna UnitPrice con el promedio calculado. * La columna actualizada se imprime. **Resultado Esperado**: Una serie de valores de UnitPrice donde los NaN se reemplazan por el promedio de los valores no faltantes en la columna.
Yo he trabajado con grandes bases datos pero no directamente en código sino en interfaces gráficas, lo importante es saber lo que vamos usar y si vamos a realizar una manipulación de datos, es importante tener un respaldo, mientras tu actividad no requiere un cambio especifico, en alguna columna donde haya datos faltantes que eso no genere ruido, pero si es necesario poner datos, y no hay quien te específique qué poner, deberás hacerlo notificando antes a tu superior y si tu eres el superior, siempre siempre siempre siempre deber tener un respaldo de la base de datos, puede que no signifique nada a corto plazo pero muchas veces por esa buena práctica podrías salvar hasta tu empleo.
Es fundamental evaluar cuidadosamente el impacto de eliminar filas o columnas con datos inexistentes. Si la información ausente es crítica para los cálculos o análisis, su eliminación podría distorsionar los resultados y llevar a conclusiones erróneas. Por el contrario, si los datos faltantes corresponden a elementos secundarios, como una descripción de un artículo, que no afectan directamente las métricas clave o la calidad del análisis, su eliminación podría ser una decisión válida y no comprometería las conclusiones. En resumen, la importancia de eliminar datos incompletos depende del papel que juegan en el contexto del análisis y de su relevancia para los objetivos planteados.
Hola, considero que antes de hacer cambios en un dataframe por valores nulos, es importante tener el contexto de aquello que vamos a cambiar y si realmente lo podemos hacer, ya que en ocasiones nos puede generar errores en los cálculos finales y esto puede derivar en una errónea toma de decisiones. Así que investigue como puedo saber en donde están esos valores nulos y ver el detalle completo de las filas para tener un poco mas de contexto antes de hacer ese cambio. Les comparto el proceso para encontrarlos: 1\. Podemos utilizar la funcion stack(), esta reorganiza un DataFrame pivotándolo de un formato ancho a un formato largo. Esto significa que toma las columnas de un DataFrame y las convierte en un nuevo nivel en el índice, esencialmente apilándolas. ![](https://static.platzi.com/media/user_upload/image-7ec85598-3d40-43ec-9971-e2a1d76e223f.jpg) 2\. Después puedo buscar con iloc ese indice nulo y ver toda la info. ![](https://static.platzi.com/media/user_upload/image-8c39bfd9-00ee-4e03-93f7-4a5fa1b478a9.jpg) Espero sea de utilidad.
La función `dropna()` de Pandas permite eliminar filas o columnas con valores nulos. El parámetro `axis` determina la dirección del drop: - `axis=0`: Elimina filas con valores nulos. - `axis=1`: Elimina columnas con valores nulos. Por eso puede ser 0 o 1.
Desde mi perspectiva depende de la naturaleza del negocio que estamos manejando, por ejemplo en este caso que tenemos N/A en CustomerID, si la naturaleza es analizar un comportamiento de re-compra, no podemos hacer drop de la columna de CustomerID, ahora, si lo que queremos ver es un AOV (Average Order Value) podemos hacer drop de Customer ID porque lo que nos interesaría sería eñ InvoiceNo para agrupar las compras
### dentificación de Datos Faltantes 1. `isna()` **y** `isnull()`: * Ambos métodos son equivalentes y devuelven un `DataFrame` de booleanos donde `True` indica un valor faltante (`NaN`).
pregunta? El numero total de registros o elementos es: 541909. Por qué la diferencia con los faltantes que son Description=1454 y CustomerID = 135080,me da un total de 405.375 mil elementos o regitros ,sin faltantes. Pero cuando realizo la isntruccion con el con el metodo DF.dropna() ,que me entrega todos los datos existentes y saca los faltantes el resultado es 406.829 mil resgistros? No debe ser 405.375 resgsitros? Gracias.
Respondiendo a la pregunta del final, todo depende del tipo de dato que estamos analizando y el tipo de investigación, por ejemplo a nivel de compras de un producto llenaría los datos faltantes con un cero y con datos que registros como por ejemplo temperatura corporal se llenarían con la media; porque en este caso si ponemos cero estaríamos diciendo que la persona está congelada y muerta xD.
anejar datos faltantes es un paso crucial en el proceso de limpieza y preparación de datos para el análisis. Pandas ofrece una variedad de métodos para identificar, eliminar, y rellenar datos faltantes en un `DataFrame` o `Series`. # **Identificación de Datos Faltantes** Primero, es importante identificar dónde se encuentran los datos faltantes en tu dataset. #### **Métodos Comunes**: #### `isnull()`: Devuelve un DataFrame del mismo tamaño que indica con `True` o `False` dónde hay valores faltantes (`NaN`). `notnull()`: Es lo contrario de `isnull()`, devuelve `True` donde no hay valores faltantes. # **liminación de Datos Faltantes** En algunos casos, puede ser adecuado eliminar filas o columnas con datos faltantes. #### **Métodos Comunes** `dropna()`: Elimina las filas (o columnas) con al menos un valor faltante. `axis=0` (default): Elimina filas con valores faltantes. `axis=1`: Elimina columnas con valores faltantes. `how='any'` (default): Elimina la fila/columna si al menos un valor es faltante. `how='all'`: Elimina la fila/columna solo si todos los valores son faltantes. El manejo de datos faltantes es un aspecto crucial del preprocesamiento de datos en análisis de datos. La elección entre eliminar o imputar datos faltantes depende de la naturaleza de los datos y del impacto que los datos faltantes pueden tener en el análisis.
\- Manejar datos faltantes es un paso crucial en el proceso de limpieza y preparación de datos para el análisis. Pandas ofrece una variedad de métodos para identificar, eliminar, y rellenar datos faltantes en un DataFrame o Series. \### Identificación de Datos FaltantesPrimero, es importante identificar dónde se encuentran los datos faltantes en tu dataset. \### Métodos Comunes:"isnull()": Devuelve un DataFrame del mismo tamaño que indica con True o False dónde hay valores faltantes (NaN)."notnull": Es lo contrario de isnull(), devuelve True donde no hay valores faltantes.
![]()![](https://static.platzi.com/media/user_upload/image-242d9d02-31ad-4d6f-a164-0918ddb75290.jpg)
Como podemos empezar a llenar los valores haciendo cambios? 👩‍💻