J'essaie de filtrer un dataframe PySpark qui a None
comme valeur de ligne:
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')]
et je peux filtrer correctement avec une valeur de chaîne:
df[df.dt_mvmt == '2016-03-31']
# some results here
mais cela échoue:
df[df.dt_mvmt == None].count()
0
df[df.dt_mvmt != None].count()
0
Mais il y a certainement des valeurs dans chaque catégorie. Que se passe-t-il?
Réponses:
Vous pouvez utiliser
Column.isNull
/Column.isNotNull
:Si vous souhaitez simplement supprimer les
NULL
valeurs que vous pouvez utiliserna.drop
avec l'subset
argument:Les comparaisons basées sur l'égalité avec
NULL
ne fonctionneront pas car dans SQLNULL
n'est pas défini, toute tentative de comparaison avec une autre valeur renvoieNULL
:La seule méthode valide avec laquelle comparer la valeur
NULL
estIS
/IS NOT
qui sont équivalents aux appels de méthodeisNull
/isNotNull
.la source
__eq__
avec None;) Etis
ne fonctionnerait pas car il ne se comporte pas de la même manière.df.filter("dt_mvmt is not NULL")
gère les deux.Essayez d'utiliser simplement la fonction isNotNull .
la source
Pour obtenir des entrées dont les valeurs dans la
dt_mvmt
colonne ne sont pas nulles nous avonset pour les entrées nulles, nous avons
la source
Si vous voulez rester avec le syntex Pandas, cela a fonctionné pour moi.
la source
si colonne = Aucun
Utilisez créer un tentable sur un bloc de données:
Alors utilisez:
column_old_value='None'
la source
Il existe plusieurs façons de supprimer / filtrer les valeurs nulles d'une colonne dans DataFrame.
Permet de créer un DataFrame simple avec le code ci-dessous:
Vous pouvez maintenant essayer l'une des approches ci-dessous pour filtrer les valeurs nulles.
Vous pouvez également consulter la section "Travailler avec des valeurs NULL" sur mon blog pour plus d'informations.
J'espère que cela aide.
la source
PySpark fournit diverses options de filtrage basées sur des conditions arithmétiques, logiques et autres. La présence de valeurs NULL peut gêner d'autres processus. Les supprimer ou les imputer statistiquement pourrait être un choix.
L'ensemble de code ci-dessous peut être considéré:
la source
J'essaierais aussi:
df = df.dropna(subset=["dt_mvmt"])
la source
Si vous souhaitez filtrer les enregistrements ayant une valeur Aucune dans la colonne, consultez l'exemple ci-dessous:
Filtrez maintenant les enregistrements de valeur nulle:
Si vous souhaitez supprimer ces enregistrements de DF, voir ci-dessous:
la source
None / Null est un type de données de la classe NoneType dans pyspark / python donc, ci-dessous ne fonctionnera pas car vous essayez de comparer l'objet NoneType avec l'objet string
Mauvaise façon de filtrerdf [df.dt_mvmt == Aucun] .count () 0 df [df.dt_mvmt! = Aucun] .count () 0
correct
df = df.where (col ("dt_mvmt"). isNotNull ()) renvoie tous les enregistrements avec dt_mvmt comme None / Null
la source