English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ejemplo de operación de pérdida de datos en Pandas
En la vida real, la pérdida de datos siempre es un problema. El aprendizaje automático y la minería de datos, entre otros campos, enfrentan problemas graves en la precisión de la predicción de los modelos, ya que los valores faltantes pueden llevar a una calidad de datos deficiente. En estos campos, el manejo de valores faltantes es un punto principal para hacer que los modelos sean más precisos y efectivos.
Consideremos una encuesta en línea de un producto. Muchas veces, las personas no comparten toda la información relacionada con ellos. Pocas personas comparten su experiencia, pero no comparten cuánto tiempo han utilizado el producto; pocas personas comparten el tiempo que han utilizado el producto, sus experiencias en lugar de su información de contacto. Por lo tanto, de alguna manera u otra siempre se perderá una parte de los datos, lo cual es muy común en situaciones en tiempo real.
Ahora veamos cómo manejar valores faltantes utilizando Pandas (por ejemplo, NA o NaN).
# importar la biblioteca pandas import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ['h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df)
Los resultados de la ejecución son los siguientes:
uno dos tres a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN reemplazado con '0': uno dos tres a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
Usando la reindexación, creamos un DataFrame con valores faltantes. En la salida, NaN representa que no es un número.
Para facilitar la detección de valores faltantes (y diferentes dtypes de arrays), Pandas proporciona las funciones ISNULL() y NOTNULL(), que también son métodos para objetos de series y DataFrames.-
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ['h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df['one'].isnull())
Los resultados de la ejecución son los siguientes:
a Falso b Verdadero c Falso d Verdadero e Falso f Falso g Verdadero h Falso Nombre: one, tipo: bool
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ['h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df['one'].notnull())
Los resultados de la ejecución son los siguientes:
a Verdadero b Falso c Verdadero d Falso e Verdadero f Verdadero g False h True Nombre: one, tipo: bool
Al resumir datos, NA se considerará cero Si todos los datos son inaplicables, el resultado es inaplicable
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ['h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df['one'].sum())
Los resultados de la ejecución son los siguientes:
2.02357685917
import pandas as pd import numpy as np df = pd.DataFrame(índice=[0,1,2,3,4,5], columnas=['uno', imprimir(df['one'].sum())
Los resultados de la ejecución son los siguientes:
nan
Pandas ofrece varios métodos para eliminar valores perdidos. La función fillna puede usar los siguientes métodos para 'rellenar' valores NA con datos no nulos.
El siguiente programa muestra cómo reemplazar 'NaN' con '0'.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(3, 3]), índice=['a', 'c', 'e'], columnas=['uno', '], índice=['a', 'c', 'e'], columnas=['uno', df = df.reindex(['a', 'b', 'c']) imprimir(df) imprimir(\"NaN reemplazado con '0':\ imprimir(df.fillna(0))
Los resultados de la ejecución son los siguientes:
uno dos tres a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN reemplazado con '0': uno dos tres a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
Aquí, llenamos con cero; por el contrario, también podemos llenar con cualquier otro valor.
Usando el concepto de relleno discutido en el capítulo 'Reindexación', llenaremos los valores faltantes.
Método | Operación |
pad/rellenar | Rellenar hacia adelante< |
bfill/backfill | Rellenar hacia adelante |
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ['h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df.fillna(método='pad'))
Los resultados de la ejecución son los siguientes:
uno dos tres a 0.077988 0.476149 0.965836 b 0.077988 0.476149 0.965836 c}} -0.390208 -0.551605 -2.301950 d -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ['h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df.fillna(método='backfill'))
Los resultados de la ejecución son los siguientes:
uno dos tres a 0.077988 0.476149 0.965836 b -0.390208 -0.551605 -2.301950 c}} -0.390208 -0.551605 -2.301950 d -2.000303 -0.788201 1.510072 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g 0.085100 0.532791 0.887415 h 0.085100 0.532791 0.887415
Si solo desea excluir valores perdidos, utilice la función dropna junto con el parámetro axis. Por defecto, axis = 0, lo que significa que si cualquier valor en una fila es NA, se excluirá toda la fila.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ['h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) imprimir(df.dropna())
Los resultados de la ejecución son los siguientes:
uno dos tres un 0.077988 0.476149 0.965836 c}} -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ['h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df.dropna(axis=1))
Los resultados de la ejecución son los siguientes:
DataFrame vacío Columnas: [] Índice: [a, b, c, d, e, f, g, h]
Muchas veces, debemos reemplazar un valor genérico con un valor específico. Podemos lograrlo aplicando el método replace().
Reemplazar NA con un valor escalar es el comportamiento equivalente de la función fillna().
import pandas as pd import numpy as np df = pd.DataFrame({'one': [10,20,30,40,50,2000], 'two': [1000,0,30,40,50,60]}) print(df.replace({1000:10,2000:60}))
Los resultados de la ejecución son los siguientes:
uno dos 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60
import pandas as pd import numpy as np df = pd.DataFrame({'one': [10,20,30,40,50,2000], 'two': [1000,0,30,40,50,60]}) print(df.replace({1000:10,2000:60)
Los resultados de la ejecución son los siguientes:
uno dos 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60