处理特殊字符,如 "\000"、"\n"、"\r"、"bellchars" ;在 pyspark 数据框中
Handling Special Characters like "\000", "\n", "\r", "bellchars" ; in the pyspark dataframe
我有以下 python 数据框:
d = [{'name': ' Alice', 'age': "1 '' 2"}, {'name': ' " ', 'age': "â"}, {'name': '', 'age': "ây"}, {'name': '', 'age': "null"}]
我已经解决了 space 问题,但我还想删除任何特殊字符,如“\000”、“\n”、“\r”、"bellchars" 进入数据框。
我尝试了以下代码来处理特殊字符:
for col_i in df_test.columns:
df_ascii = df_test.withColumn(col_i, unidecode(unicode(col_i, encoding = "utf-8")))
但它给出了以下内容:
我还使用了以下代码:
def nonasciitoascii(unicodestring):
return unicodestring.encode("ascii","ignore")
convertedudf = udf(nonasciitoascii)
for cols in df_test.columns:
print(cols)
converted = df_test.withColumn(cols,convertedudf(df_test[cols]))
但输出是:
有什么办法可以解决这个问题吗?我尝试了一些其他代码示例,但无法处理上述字符(处理我的意思是删除)。
同样尝试 pyspark.sql.function.regexp_replace
。
df = sqlContext.createDataFrame(
[{'name': ' Alice', 'age': "1 '' 2"},
{'name': ' " ', 'age': "â"},
{'name': '', 'age': "ây"},
{'name': '', 'age': "null"}])
df.select([
F.regexp_replace(col, '[(\n)(\r)([=10=]0)( )]', "").alias(col)
for col in df.columns]).collect()
输出:
[Row(age="1''2", name='Alice'),
Row(age='â', name='"'),
Row(age='ây', name=''),
Row(age='null', name='')]
如何删除所有非字母数字字符?
df = sqlContext.createDataFrame(
[{'name': ' Ali.|ce', 'age': "1 '' 2"},
{'name': ' " ', 'age': "â"},
{'name': '', 'age': "ây"},
{'name': '', 'age': "null"}])
# This expression will keep all the alphanumeric values
# plus whatever special symbol we would like to keep
# ex '.' and '|' are kept in this example.
df.select([
F.regexp_replace(col, '[^(\w)+(.|)]', "").alias(col)
for col in df.columns]).collect()
输出:
[Row(age='12', name='Ali.|ce'),
Row(age='', name=''),
Row(age='y', name=''),
Row(age='null', name='')]
我有以下 python 数据框:
d = [{'name': ' Alice', 'age': "1 '' 2"}, {'name': ' " ', 'age': "â"}, {'name': '', 'age': "ây"}, {'name': '', 'age': "null"}]
我已经解决了 space 问题,但我还想删除任何特殊字符,如“\000”、“\n”、“\r”、"bellchars" 进入数据框。
我尝试了以下代码来处理特殊字符:
for col_i in df_test.columns:
df_ascii = df_test.withColumn(col_i, unidecode(unicode(col_i, encoding = "utf-8")))
但它给出了以下内容:
我还使用了以下代码:
def nonasciitoascii(unicodestring):
return unicodestring.encode("ascii","ignore")
convertedudf = udf(nonasciitoascii)
for cols in df_test.columns:
print(cols)
converted = df_test.withColumn(cols,convertedudf(df_test[cols]))
但输出是:
有什么办法可以解决这个问题吗?我尝试了一些其他代码示例,但无法处理上述字符(处理我的意思是删除)。
同样尝试 pyspark.sql.function.regexp_replace
。
df = sqlContext.createDataFrame(
[{'name': ' Alice', 'age': "1 '' 2"},
{'name': ' " ', 'age': "â"},
{'name': '', 'age': "ây"},
{'name': '', 'age': "null"}])
df.select([
F.regexp_replace(col, '[(\n)(\r)([=10=]0)( )]', "").alias(col)
for col in df.columns]).collect()
输出:
[Row(age="1''2", name='Alice'),
Row(age='â', name='"'),
Row(age='ây', name=''),
Row(age='null', name='')]
如何删除所有非字母数字字符?
df = sqlContext.createDataFrame(
[{'name': ' Ali.|ce', 'age': "1 '' 2"},
{'name': ' " ', 'age': "â"},
{'name': '', 'age': "ây"},
{'name': '', 'age': "null"}])
# This expression will keep all the alphanumeric values
# plus whatever special symbol we would like to keep
# ex '.' and '|' are kept in this example.
df.select([
F.regexp_replace(col, '[^(\w)+(.|)]', "").alias(col)
for col in df.columns]).collect()
输出:
[Row(age='12', name='Ali.|ce'),
Row(age='', name=''),
Row(age='y', name=''),
Row(age='null', name='')]