2017-11-03 3 views
0

Ich versuche, ein Sonderzeichen (å) aus einer Spalte in einem Datenrahmen zu entfernen.Sonderzeichen aus einer Spalte im Datenframe entfernen

Meine Daten wie folgt aussieht:

ClientID, Patienten_ID

AR0001å, DH_HL704221157198295_91

AR00022, DH_HL704221157198295_92

Meine ursprünglichen Daten ca. in der Größe 8 TB, von dem ich brauche um diesen besonderen Charakter loszuwerden.

-Code-Daten zu laden:

reader.option("header", true) 
       .option("sep", ",") 
       .option("inferSchema", false) 
       .option("charset", "ISO-8859-1") 
       .schema(schema) 
       .csv(path) 

Nach in Datenrahmen geladen, wenn ich df.show() tun es zeigt:

+--------+--------------------+ |ClientID| PatientID| +--------+--------------------+ |AR0001Ã¥|DH_HL704221157198...| |AR00022 |DH_HL704221157198...| +--------+--------------------+

-Code dieses Zeichen zu ersetzen:

df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "\å", ""));

Aber das hat nicht funktioniert. Während ich die Daten im Datenframe lade, wenn ich den Zeichensatz in "UTF-8" ändere, funktioniert es.

Ich finde keine Lösung mit dem aktuellen Zeichensatz (ISO-8859-1).

Antwort

1

Einige Dinge zu beachten

  • Stellen Sie sicher, das Ergebnis einer neuen Variablen zuweisen und verwenden, die anschließend
  • Sie müssen in dem Befehl nicht entkommen „å“ mit \
  • colName sollte

ClientId oder PatientID sein Wenn Sie all diese Dinge getan hat, dann würde ich vorschlagen, statt passend auf "å", versuche, die Zeichen, die du behalten möchtest, zu vergleichen. Zum Beispiel für die ClientID Spalte

df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "[^A-Z0-9_]", "")); 

würde Ein weiterer Ansatz, das UTF-8-Zeichen „A“, um es ist ISO-8859-1 gleichwertig und ersetzt mit dem resultierenden String zu konvertieren.

String escapeChar = new String("å".getBytes("UTF-8"), "ISO-8859-1"); 
+0

Danke für die Antwort. Ich kann nicht alle Sonderzeichen aus den Daten entfernen. Es gibt wenige Spalten in den Daten, in denen einige dieser Sonderzeichen wie ® Bedeutung haben. Ich habe keine Subsets, die sagen, was zu behalten und was zu entfernen ist. Die Anforderung besteht darin, ein bestimmtes Sonderzeichen aus einer bestimmten Spalte zu entfernen. – abhiadh

+0

@abhiadh 'regexp_replace (df.col (" ClientID ")," Ã ¥ "," ") scheint bei ISO-8859-1 (mit scala) für mich zu arbeiten. – Shaido

+1

Ja, das hat tatsächlich funktioniert. Ich habe das Sonderzeichen "å" umgewandelt, bevor ich zur Funktion übergegangen bin und es hat funktioniert. 'neue Zeichenfolge (" å ".getBytes (" UTF-8 ")," ISO-8859-1 ");' Danke – abhiadh

Verwandte Themen