Pandas df.dropna() función
df.dropna()es una función en Pandas que se utiliza para eliminar filas o columnas que contienen valores faltantes.
es un problema común.NaN、NoneoNULL) es un problema común.dropna()La función proporciona una forma sencilla de limpiar los datos; puedes elegir eliminar filas o columnas que contengan valores faltantes, o filtrar los datos según la proporción de valores faltantes.
Sintaxis básica y parámetros
dropna()es una función miembro de DataFrame, mediante el operador punto.para invocarla.
Formato de sintaxis
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
Descripción de parámetros
| Parámetro | Tipo | Obligatorio | Descripción | Valor predeterminado |
|---|---|---|---|---|
| axis | int o str | Opcional | Especifica si se eliminan filas o columnas.0o'index'Indica eliminar filas con valores faltantes;1o'columns'Indica eliminar columnas con valores faltantes. |
0 |
| how | str | Opcional | Especifica la condición de eliminación.'any'Indica eliminar si hay cualquier valor faltante;'all'Indica eliminar solo si todos son valores faltantes. |
'any' |
| thresh | int | Opcional | Establece el número mínimo de valores no faltantes. Si el número de valores no faltantes en la fila (o columna) es menor quethresh, se elimina esa fila (o columna). |
None |
| subset | array-like | Opcional | Especifica en qué columnas (o filas) revisar valores faltantes. Siaxis=0, entoncessubsetespecifica nombres de columnas; siaxis=1, entoncessubsetespecifica índices de filas. |
None |
| inplace | bool | Opcional | Si esTrue, modifica directamente el DataFrame original, no devuelve un nuevo objeto; si esFalse, devuelve un nuevo DataFrame, los datos originales no cambian. |
False |
Descripción del valor de retorno
- Devuelve un nuevo DataFrame (si
inplace=False), oNone(siinplace=True)。 - el DataFrame devuelto no contiene filas o columnas con valores faltantes.
Ejemplos
Vamos a dominar completamente mediante una serie de ejemplosdropna()el uso de.
Ejemplo 1: Eliminar filas con valores faltantes
Este es el uso más común: eliminar cualquier fila que contenga valores faltantes.
Ejemplo
import numpy as np
# Crear un DataFrame con valores faltantes
data = {
'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
'Edad': [25, 30, np.nan, 35, 28], # La edad de Wang Wu falta
'Salario': [5000, 6000, 5500, np.nan, 7000], # El salario de Zhao Liu falta
'Departamento': ['Tecnología', 'Mercado', 'Tecnología', 'Mercado', 'Tecnología']
}
df = pd.DataFrame(data)
print("datos originales:")
print(df)
print("=" * 50)
# Eliminar filas con valores faltantes (comportamiento predeterminado)
df_cleaned = df.dropna()
print("Datos después de eliminar los valores faltantes:")
print(df_cleaned)
Resultado esperado:
原始数据:
姓名 年龄 薪资 部门
0 张三 25.0 5000.0 技术
1 李四 30.0 6000.0 市场
2 王五 NaN 5500.0 技术
3 赵六 35.0 NaN 市场
4 钱七 28.0 7000.0 技术
==================================================
删除缺失值后的数据:
姓名 年龄 薪资 部门
0 张三 25.0 5000.0 技术
1 李四 30.0 6000.0 市场
4 钱七 28.0 7000.0 技术
Análisis del código:
- Creamos un DataFrame con valores faltantes, donde la edad de Wang Wu es
NaN, el salario de Zhao Liu esNaN。 - Usando
df.dropna()con el parámetro predeterminado, se eliminaron todas las filas con valores faltantes. - El resultado conserva los datos de Zhang San, Li Si y Qian Qi; elimina a Wang Wu y Zhao Liu.
Ejemplo 2: Eliminar columnas con valores faltantes
A veces nos interesa más qué columnas tienen valores faltantes, y podemos optar por eliminar columnas.
Ejemplo
import numpy as np
# Crear un DataFrame con valores faltantes
data = {
'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
'Edad': [25, 30, 35, 40],
'Salario': [5000, np.nan, 5500, np.nan], # Varias columnas tienen valores faltantes
'Departamento': [np.nan, 'Mercado', 'Tecnología', 'Mercado'],
'Ciudad': ['Pekín', Shanghái, 'Guangzhou', 'Shenzhen'] # Sin valores faltantes
}
df = pd.DataFrame(data)
print("datos originales:")
print(df)
print("=" * 50)
# Eliminar columnas con valores faltantes
df_cleaned = df.dropna(axis=1)
print("Datos después de eliminar las columnas con valores faltantes:")
print(df_cleaned)
Resultado esperado:
原始数据:
姓名 年龄 薪资 部门 城市
0 张三 25 5000.0 NaN 北京
1 李四 30 NaN 市场 上海
2 王五 35 5500.0 技术 广州
3 赵六 40 NaN 市场 深圳
==================================================
删除缺失值列后的数据:
姓名 年龄 城市
0 张三 25 北京
1 李四 30 上海
2 王五 35 广州
3 赵六 40 深圳
Análisis del código:
- Configurando
axis=1indica operación por columnas. - Las columnas de salario y departamento contienen valores faltantes, por lo tanto se eliminan.
- Las columnas de nombre, edad y ciudad no tienen valores faltantes, por lo que se conservan.
Ejemplo 3: Usar el parámetro thresh para controlar la condición de eliminación
threshEl parámetro thresh permite establecer el número mínimo de valores no faltantes; solo se elimina cuando el número de valores no faltantes en la fila (o columna) es inferior a este umbral.
Ejemplo
import numpy as np
# Crear un DataFrame donde cada fila tiene algunos valores faltantes
data = {
'A': [1, 2, np.nan, 4, 5],
'B': [np.nan, 2, 3, 4, np.nan], # Tiene 2 valores faltantes
'C': [1, 2, 3, 4, 5], # Sin valores faltantes
'D': [np.nan, np.nan, np.nan, 4, 5] # Tiene 3 valores faltantes
}
df = pd.DataFrame(data)
print("datos originales:")
print(df)
print("=" * 50)
# Conservar solo las filas con al menos 3 valores no faltantes
df_cleaned = df.dropna(thresh=3)
print(Conservar filas con al menos 3 valores no faltantes:)
print(df_cleaned)
Resultado esperado:
原始数据:
A B C D
0 1.0 NaN 1.0 NaN
1 2.0 2.0 2.0 NaN
2 NaN 3.0 3.0 NaN
3 4.0 4.0 4.0 4.0
4 5.0 NaN 5.0 5.0
==================================================
保留至少3个非缺失值的行:
A B C D
1 2.0 2.0 2.0 NaN
3 4.0 4.0 4.0 4.0
Análisis del código:
- La fila 0 solo tiene 1 valor no faltante (1.0), se elimina.
- La fila 1 tiene 3 valores no faltantes (2.0, 2.0, 2.0), se conserva.
- La fila 2 solo tiene 2 valores no faltantes (3.0, 3.0), se elimina.
- La fila 3 tiene 4 valores no faltantes, se conserva.
- La fila 4 solo tiene 3 valores no faltantes (5.0, 5.0, 5.0), se conserva.
Ejemplo 4: Usar subset para especificar las columnas a revisar
A veces solo nos interesa si ciertas columnas tienen valores faltantes, podemos usarsubsetel parámetro.
Ejemplo
import numpy as np
# Crear un DataFrame
data = {
'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
'Edad': [25, np.nan, 35, 40], # La edad de Li Si falta
'Salario': [5000, 6000, np.nan, 8000], # El salario de Wang Wu falta
'Departamento': ['Tecnología', 'Mercado', 'Tecnología', 'Mercado']
}
df = pd.DataFrame(data)
print("datos originales:")
print(df)
print("=" * 50)
# Solo revisar valores faltantes en las columnas 'nombre' y 'departamento'
df_cleaned = df.dropna(subset=['Nombre', 'Departamento'])
print(Datos después de comprobar valores faltantes solo en las columnas de nombre y departamento:)
print(df_cleaned)
print("=" * 50)
# Solo revisar valores faltantes en la columna 'salario'
df_cleaned2 = df.dropna(subset=['Salario'])
print("Datos después de verificar valores faltantes solo en la columna de salario:")
print(df_cleaned2)
Resultado esperado:
原始数据:
姓名 年龄 薪资 部门
0 张三 25.0 5000.0 技术
1 李四 NaN 6000.0 市场
2 王五 35.0 NaN 技术
3 赵六 40.0 8000.0 市场
==================================================
只在姓名和部门列检查缺失值后的数据:
姓名 年龄 薪资 部门
0 张三 25.0 5000.0 技术
1 李四 NaN 6000.0 市场
2 王五 35.0 NaN 技术
3 赵六 40.0 8000.0 市场
==================================================
只在薪资列检查缺失值后的数据:
姓名 年龄 薪资 部门
0 张三 25.0 5000.0 技术
1 李四 30.0 6000.0 市场
3 赵六 40.0 8000.0 市场
Análisis del código:
- Las columnas de nombre y departamento no tienen valores faltantes, por lo que después de la revisión se conservan todas las filas.
- En la columna de salario, el salario de Wang Wu es
NaN, por lo tanto, la fila 2 se elimina.
Ejemplo 5: Usar how='all' para eliminar solo filas con todos los valores faltantes
how='all'El parámetro how='all' indica que solo se elimina cuando todos los valores en la fila (o columna) son valores faltantes.
Ejemplo
import numpy as np
# Crear un DataFrame que contenga algunas filas con todos los valores faltantes
data = {
'A': [1, np.nan, np.nan, 4],
'B': [2, np.nan, np.nan, 5],
'C': [3, np.nan, np.nan, 6]
}
df = pd.DataFrame(data)
print("datos originales:")
print(df)
print("=" * 50)
# Eliminar filas con todos los valores faltantes
df_cleaned = df.dropna(how='all')
print("Después de eliminar filas con todos los valores faltantes:")
print(df_cleaned)
Resultado esperado:
原始数据:
A B C
0 1.0 2.0 3.0
1 NaN NaN NaN
2 NaN NaN NaN
3 4.0 5.0 6.0
==================================================
删除全部为缺失值的行后:
A B C
0 1.0 2.0 3.0
3 4.0 5.0 6.0
Análisis del código:
- Las filas 1 y 2 tienen todos los valores
NaN, usandohow='all'se eliminan. - Las filas 0 y 3 tienen datos reales y se conservaron.
Notas
dropna()Por defecto no se modifica el DataFrame original; si desea modificarlo en el lugar, useinplace=Trueparámetro.- Usando
threshel parámetro, el valor establecido debe basarse en sus requisitos de calidad de datos. - Antes de eliminar datos, se recomienda usar
df.isnull().sum()para ver la cantidad de valores faltantes en cada columna y tomar una decisión más informada. - Para conjuntos de datos importantes, use con precaución
dropna(), ya que esto puede provocar una gran pérdida de datos; considere usarfillna()para rellenar los valores faltantes.
Otras extensiones
Funciones comunes de Pandas