Remplacer toutes les valeurs numériques dans une trame de données pyspark par une valeur constante


12

Considérons une trame de données pyspark composée d'éléments «nuls» et d'éléments numériques. En général, les éléments numériques ont des valeurs différentes. Comment est-il possible de remplacer toutes les valeurs numériques de la trame de données par une valeur numérique constante (par exemple par la valeur 1)? Merci d'avance!

Exemple pour la trame de données pyspark:

c1c2c310,0411,352-1null-1.23null1.2null

Le résultat devrait être:

c1c2c3111121null13null1null

Bienvenue chez SO! Pourriez-vous publier des données et / ou des exemples de code afin que nous puissions mieux vous aider?
Stéréo

Réponses:


8

L'utilisation litconvertirait toutes les valeurs de la colonne en la valeur donnée.

Pour le faire uniquement pour les valeurs non nulles de la trame de données, vous devez filtrer les valeurs non nulles de chaque colonne et remplacer votre valeur. whenpeut vous aider à y parvenir.

from pyspark.sql.functions import when   

df.withColumn('c1', when(df.c1.isNotNull(), 1))
  .withColumn('c2', when(df.c2.isNotNull(), 1))
  .withColumn('c3', when(df.c3.isNotNull(), 1))

Il en résulterait:

c1c2c3111121null13null1null

En outre, si vous souhaitez également remplacer ces valeurs nulles par une autre valeur, vous pouvez les utiliser otherwiseen combinaison avec when. Disons que vous voulez imputer 0là-bas:

from pyspark.sql.functions import when   

df.withColumn('c1', when(df.c1.isNotNull(), 1).otherwise(0))
  .withColumn('c2', when(df.c2.isNotNull(), 1).otherwise(0))
  .withColumn('c3', when(df.c3.isNotNull(), 1).otherwise(0))

Il en résulterait:

c1c2c3111121013010

7

Selon votre problème, je pense qu'il pourrait être plus facile à utiliser éclairé . Essaye ça-

from pyspark.sql.functions import lit
new_df = df.withColumn('column_name', lit(1))

J'espère que cela aide!


2

Ce serait plus facile si vous avez plusieurs colonnes:

from pyspark.sql.functions import when   
cols = df.columns # list of all columns
for col in cols:
    df= df.withColumn(col, when(df[col]>0,1).otherwise(0))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.