Estoy tratando de filtrar un marco de datos PySpark que tiene None
como valor de fila:
df.select('dt_mvmt').distinct().collect()
[Row(dt_mvmt=u'2016-03-27'),
Row(dt_mvmt=u'2016-03-28'),
Row(dt_mvmt=u'2016-03-29'),
Row(dt_mvmt=None),
Row(dt_mvmt=u'2016-03-30'),
Row(dt_mvmt=u'2016-03-31')]
y puedo filtrar correctamente con un valor de cadena:
df[df.dt_mvmt == '2016-03-31']
# some results here
pero esto falla:
df[df.dt_mvmt == None].count()
0
df[df.dt_mvmt != None].count()
0
Pero definitivamente hay valores en cada categoría. ¿Que esta pasando?
Respuestas:
Puede usar
Column.isNull
/Column.isNotNull
:Si desea simplemente eliminar
NULL
valores, puede usarna.drop
consubset
argumento:Las comparaciones basadas en la igualdad con
NULL
no funcionarán porque en SQLNULL
no está definido, por lo que cualquier intento de compararlo con otro valor devuelveNULL
:El único método válido para comparar el valor
NULL
esIS
/IS NOT
que es equivalente a las llamadas al métodoisNull
/isNotNull
.fuente
__eq__
con Ninguno;) Yis
no funcionaría porque no se comporta de la misma manera.df.filter("dt_mvmt is not NULL")
maneja ambos.Intente usar la función isNotNull .
fuente
Para obtener entradas cuyos valores en la
dt_mvmt
columna no sean nulos tenemosy para las entradas que son nulas tenemos
fuente
Si quieres seguir con el syntex de Pandas, esto funcionó para mí.
fuente
si columna = Ninguno
Utilice crear un marco de datos tentador:
Entonces usa:
column_old_value='None'
fuente
Hay varias formas de eliminar / filtrar los valores nulos de una columna en DataFrame.
Creemos un DataFrame simple con el siguiente código:
Ahora puede probar uno de los métodos siguientes para filtrar los valores nulos.
También puede consultar la sección "Trabajar con valores nulos" en mi blog para obtener más información.
Espero que ayude.
fuente
PySpark proporciona varias opciones de filtrado basadas en condiciones aritméticas, lógicas y de otro tipo. La presencia de valores NULL puede obstaculizar procesos posteriores. Eliminarlos o imputarlos estadísticamente podría ser una opción.
Se puede considerar el siguiente conjunto de códigos:
fuente
También probaría:
df = df.dropna(subset=["dt_mvmt"])
fuente
Si desea filtrar los registros que tienen el valor Ninguno en la columna, consulte el siguiente ejemplo:
Ahora filtre los registros de valor nulo:
Si desea eliminar esos registros de DF, consulte a continuación:
fuente
None / Null es un tipo de datos de la clase NoneType en pyspark / python, por lo que A continuación no funcionará ya que está tratando de comparar el objeto NoneType con el objeto string
Forma incorrecta de filtrardf [df.dt_mvmt == Ninguno] .count () 0 df [df.dt_mvmt! = Ninguno] .count () 0
correcto
df = df.where (col ("dt_mvmt"). isNotNull ()) devuelve todos los registros con dt_mvmt como None / Null
fuente