Ersetzen Sie alle numerischen Werte in einem Pyspark-Datenrahmen durch einen konstanten Wert

12

Stellen Sie sich einen Pyspark-Datenrahmen vor, der aus 'Null'-Elementen und numerischen Elementen besteht. Im Allgemeinen haben die numerischen Elemente unterschiedliche Werte. Wie ist es möglich, alle numerischen Werte des Datenrahmens durch einen konstanten numerischen Wert zu ersetzen (zum Beispiel durch den Wert 1)? Danke im Voraus!

Beispiel für den pyspark-Datenrahmen:

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

Das Ergebnis sollte sein:

c1c2c3111121null13null1null
nur wir
quelle
Willkommen bei SO! Könnten Sie einige Daten und / oder Codebeispiele veröffentlichen, damit wir Ihnen besser helfen können?
Stereo

Antworten:

8

Die Verwendung litwürde alle Werte der Spalte in den angegebenen Wert konvertieren.

Um dies nur für Nicht-Null-Werte des Datenrahmens zu tun, müssten Sie Nicht-Null-Werte jeder Spalte filtern und Ihren Wert ersetzen. whenkann Ihnen dabei helfen.

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

Dies würde führen zu:

c1c2c3111121null13null1null

Wenn Sie diese Nullwerte auch durch einen anderen Wert ersetzen möchten, können Sie sie otherwisein Kombination mit verwenden when. Angenommen, Sie möchten dort unterstellen 0:

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

Dies würde führen zu:

c1c2c3111121013010
Santoshi M.
quelle
7

Aufgrund Ihres Problems denke ich, dass es möglicherweise einfacher ist, beleuchtet zu verwenden . Versuche dies-

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

Ich hoffe es hilft!

Abhishek Jaiswal
quelle
2

Dies wäre einfacher, wenn Sie mehrere Spalten haben:

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
quelle