Ich habe einen Datenrahmen mit einigen Attributen und es hat den nächsten Auftritt:in einem Datenrahmen in Pyspark
+-------+-------+
| Atr1 | Atr2 |
+-------+-------+
| 3,06 | 4,08 |
| 3,03 | 4,08 |
| 3,06 | 4,08 |
| 3,06 | 4,08 |
| 3,06 | 4,08 |
| ... | ... |
+-------+-------+
Wie Sie sehen können, werden die Werte des ATR1 und ATR2 der Datenrahmen sind Zahlen das hat ein ',' Zeichen. Dies liegt daran, dass ich diese Daten aus einer CSV-Datei geladen habe, in der die Dezimalstellen der DoubleType-Zahlen durch "," dargestellt wurden.
Wenn ich die Daten in einen Datenrahmen laden die Werte in String gegossen werden, so bewarb ich mich ein Casting von String für diese Attribute so DoubleType:
df = df.withColumn("Atr1", df["Atr1"].cast(DoubleType()))
df = df.withColumn("Atr2", df["Atr2"].cast(DoubleType()))
Aber wenn ich es tun, sind die Werte auf null umgewandelt
+-------+-------+
| Atr1 | Atr2 |
+-------+-------+
| null | null |
| null | null |
| null | null |
| null | null |
| null | null |
| ... | ... |
+-------+-------+
ich denke, dass der Grund dafür ist, dass DoubleType Dezimalstellen müssen getrennt werden ‚‘ statt durch ','. Aber ich habe keine Möglichkeit, die CSV-Datei zu bearbeiten, deshalb möchte ich die ',' Zeichen aus dem Dataframe durch '.' und wenden Sie dann das Casting auf DoubleType an.
Wie könnte ich es tun?
Großartig! Danke für die klare Antwort! – jartymcfly
Die Dinge sind in der gleichen Richtung wie zu dem, was ich dachte. Können Sie den gesamten '.cast'-Part überspringen, indem Sie' lambda x: float (x.replace (',', '.')), DoubleType()) '? – Adam
Guter Vorschlag! Viel kompakter – Luis