Reemplace todos los valores numéricos en un marco de datos pyspark por un valor constante

12

Considere un marco de datos pyspark que consta de elementos 'nulos' y elementos numéricos. En general, los elementos numéricos tienen valores diferentes. ¿Cómo es posible reemplazar todos los valores numéricos del marco de datos por un valor numérico constante (por ejemplo, por el valor 1)? ¡Gracias por adelantado!

Ejemplo para el marco de datos pyspark:

c1c2c310,0411,352-1nortetull-1,23nortetull1,2nortetull

El resultado debería ser:

c1c2c3111121nortetull13nortetull1nortetull
solo nosotros
fuente
Bienvenido a SO! ¿Podría publicar algunos datos y / o código de ejemplo para que podamos ayudarlo mejor?
Estéreo

Respuestas:

8

El uso litconvertiría todos los valores de la columna al valor dado.

Para hacerlo solo para valores no nulos de dataframe, tendría que filtrar los valores no nulos de cada columna y reemplazar su valor. whenpuede ayudarte a lograr esto.

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))

Esto resultaría en:

c1c2c3111121nortetull13nortetull1nortetull

Además, si desea reemplazar esos valores nulos con algún otro valor también, puede usarlos otherwiseen combinación con when. Digamos que quieres imputar 0allí:

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))

Esto resultaría en:

c1c2c31111210 0130 010 0
Santoshi M
fuente
7

Según su problema, creo que podría ser más fácil usar iluminado . Prueba esto-

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

¡Espero eso ayude!

Abhishek Jaiswal
fuente
2

Esto sería más fácil si tiene varias columnas:

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))
M. Mashayekhi
fuente