从数据框的一列中删除特殊字符

7

我将尝试从数据框中的一列中删除特殊字符(å)。

我的数据如下:

ClientID,PatientID 
AR0001å,DH_HL704221157198295_91
AR00022,DH_HL704221157198295_92

我的原始数据大约有8TB大小,我需要去掉这个特殊字符。

加载数据的代码:

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

在将数据加载到数据框后,当我执行df.show()时,它显示:

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

我试图使用以下代码替换此字符:

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

但这并没有起作用。如果我将数据加载到数据框中并将字符集更改为“UTF-8”,它将起作用。
我无法找到当前字符集(ISO-8859-1)的解决方案。
2个回答

7

需要注意的一些事情:

  • 请确保将结果分配给一个新变量并在之后使用
  • 您不需要使用\转义 "å"
  • 命令中的 colName 应为 ClientIdPatientID

如果您已经完成了这些操作,那么我建议您尝试匹配您想要保留的字符,而不是匹配 "å"。例如,在 ClientID 列中,

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

另一种方法是将UTF-8字符“å”转换为其ISO-8859-1等效字符,并用生成的字符串替换。
String escapeChar = new String("å".getBytes("UTF-8"), "ISO-8859-1");

谢谢您的回答。我无法从数据中删除所有特殊字符。在数据中有一些列,其中一些特殊字符(如®)具有特定含义。我没有子集来告诉我应该保留什么和删除什么。要求是从特定列中删除给定的特殊字符。 - abhiadh
当使用Scala和ISO-8859-1时,@abhiadh的regexp_replace(df.col("ClientID"), "Ã¥", "")对我有效。 - Shaido
1
是的,确实有效。在传递给函数之前,我将特殊字符“å”进行了转换,然后它就起作用了。 new String("å".getBytes("UTF-8"), "ISO-8859-1"); 谢谢。 - abhiadh

2
下面的命令将删除所有特殊字符,并保留字符串中的所有大小写字母和数字:
df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "[^a-zA-Z0-9]", ""));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接