从数据框的列中删除特殊字符
问题描述:
我试图从数据框的列中删除特殊字符(?)。从数据框的列中删除特殊字符
我的数据是这样的:
客户端ID,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)的解决方案。
答
需要注意以下几点,
- 确保结果分配到一个新的变量,使用后
- 你并不需要在命令逃脱“A”与
\
-
colName
应该ClientId
或PatientID
如果你做所有这些事情的话,我会建议,而不是匹配的上“å”,尝试匹配你想保留的角色。例如,为ClientID
列,
df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "[^A-Z0-9_]", ""));
另一种方法是将UTF-8字符“A”转换成它的ISO-8859-1相当于并将得到的字符串替换。
String escapeChar = new String("å".getBytes("UTF-8"), "ISO-8859-1");
感谢您的回答。我无法从数据中删除所有特殊字符。数据中有几列像®这些特殊字符中的一些具有含义。我没有说明要保留什么和要删除什么的子集。这个要求是为了从特定列中删除给定的特殊字符。 – abhiadh
@abhiadh'使用ISO-8859-1(带scala)时,regexp_replace(df.col(“ClientID”),“?¥”,“”)'似乎适用于我。 – Shaido
是的,确实有效。在传递给函数之前,我转换了特殊字符“å”并且它工作正常。 'new String(“å”.getBytes(“UTF-8”),“ISO-8859-1”);' 谢谢 – abhiadh