Bir pyspark veri çerçevesindeki tüm sayısal değerleri sabit bir değerle değiştirme


12

'Null' öğeler ve sayısal öğelerden oluşan bir pyspark veri çerçevesi düşünün. Genel olarak, sayısal elemanlar farklı değerlere sahiptir. Veri çerçevesinin tüm sayısal değerlerini sabit bir sayısal değerle değiştirmek nasıl mümkündür (örneğin, 1 değeriyle)? Şimdiden teşekkürler!

Pyspark veri çerçevesi örneği:

c1c2c310.0411.352-1null-1.23null1.2null

Sonuç şöyle olmalıdır:

c1c2c3111121null13null1null

SO hoş geldiniz! Size daha iyi yardımcı olabilmemiz için bazı veri ve / veya kod örneği gönderebilir misiniz?
Stereo

Yanıtlar:


8

Sorununuza göre, aydınlatılmış kullanımı daha kolay olabilir . Bunu dene-

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

Umarım yardımcı olur!


8

Kullanmak lit, sütunun tüm değerlerini verilen değere dönüştürür.

Bunu yalnızca veri çerçevesinin boş olmayan değerleri için yapmak için, her sütunun boş olmayan değerlerini filtrelemeniz ve değerinizi değiştirmeniz gerekir. whenbunu başarmanıza yardımcı olabilir.

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

Bunun sonucu:

c1c2c3111121null13null1null

Eğer çok başka bir değer olan null değerleri değiştirmek istiyorsanız Ayrıca, kullanabilirsiniz otherwisebirlikte when. Diyelim ki 0oraya ima etmek istiyorsunuz :

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

Bunun sonucu:

c1c2c3111121013010

2

Birden çok sütununuz varsa bu daha kolay olurdu:

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))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.