174 votes

Filtrez la colonne du dataframe Pyspark avec la valeur None.

J'essaye de filtrer un cadre de données 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 type 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 définitivement des valeurs dans chaque catégorie. Qu'est-ce qui se passe ?

1 votes

Vous voulez en fait filtrer les lignes avec des valeurs nulles, et non une colonne avec des valeurs nulles. Le titre peut être trompeur.

0 votes

En bref, une comparaison impliquant null (ou None, dans ce cas) renvoie toujours false. En particulier, la comparaison (null == null) renvoie un résultat faux. De même, la comparaison (None == None) renvoie un résultat faux.

3voto

user10238559 Points 19

Si colonne = Aucune

COLUMN_OLD_VALUE
----------------
None
1
None
100
20
------------------

Utiliser créer un temptable sur le cadre de données :

sqlContext.sql("select * from tempTable where column_old_value='None' ").show()

Utilisez donc : column_old_value='None'

2voto

Rae Points 21

Si vous voulez garder le syntex des Pandas, ceci a fonctionné pour moi.

df = df[df.dt_mvmt.isNotNull()]

2voto

None/Null est un type de données de la classe NoneType dans pyspark/python Ainsi, Below ne fonctionnera pas car vous essayez de comparer un objet NoneType avec un objet string.

Mauvaise méthode de filtrage

df[df.dt_mvmt == None].count() 0 df[df.dt_mvmt != None].count() 0

correct

df=df.where(col("dt_mvmt").isNotNull()) renvoie tous les enregistrements avec dt_mvmt comme None/Null

1voto

PySpark fournit diverses options de filtrage basées sur des conditions arithmétiques, logiques et autres. La présence de valeurs NULL peut entraver les processus ultérieurs. Il est possible de les supprimer ou de les imputer statistiquement.

L'ensemble des codes ci-dessous peut être considéré :

# Dataset is df
# Column name is dt_mvmt
# Before filtering make sure you have the right count of the dataset
df.count() # Some number

# Filter here
df = df.filter(df.dt_mvmt.isNotNull())

# Check the count to ensure there are NULL values present (This is important when dealing with large dataset)
df.count() # Count should be reduced if NULL values are present

1voto

yogesh Points 21

Si vous voulez filtrer les enregistrements ayant une valeur None dans la colonne, voyez l'exemple ci-dessous :

df=spark.createDataFrame([[123,"abc"],[234,"fre"],[345,None]],["a","b"])

Maintenant, filtrez les enregistrements à valeur nulle :

df=df.filter(df.b.isNotNull())

df.show()

Si vous voulez supprimer ces enregistrements de DF, voyez ci-dessous :

df1=df.na.drop(subset=['b'])

df1.show()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X