Substitua todos os valores numéricos em um dataframe pyspark por um valor constante

12

Considere um quadro de dados pyspark composto por elementos 'nulos' e elementos numéricos. Em geral, os elementos numéricos têm valores diferentes. Como é possível substituir todos os valores numéricos do quadro de dados por um valor numérico constante (por exemplo, pelo valor 1)? Desde já, obrigado!

Exemplo para o dataframe pyspark:

c1c2c310.0411.3521null1.23null1.2null

O resultado deve ser:

c1c2c3111121null13null1null
só nós
fonte
Bem-vindo ao SO! Você poderia postar alguns dados e / ou exemplo de código para que possamos ajudá-lo melhor?
Stereo

Respostas:

8

Usar litconverteria todos os valores da coluna para o valor fornecido.

Para fazer isso apenas para valores não nulos do quadro de dados, você teria que filtrar valores não nulos de cada coluna e substituir seu valor. whenpode ajudá-lo a conseguir isso.

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

Isso resultaria em:

c1c2c3111121null13null1null

Além disso, se você desejar substituir esses valores nulos por algum outro valor também, poderá usar otherwiseem combinação com when. Digamos que você queira imputar 0lá:

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

Isso resultaria em:

c1c2c3111121013010
Santoshi M
fonte
7

De acordo com o seu problema, acho que pode ser mais fácil usar o iluminado . Tente isto-

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

Espero que ajude!

Abhishek Jaiswal
fonte
2

Isso seria mais fácil se você tiver várias colunas:

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
fonte