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

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

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!


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))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.