当前位置: 首页 > 面试题库 >

从熊猫列中删除非ASCII字符

隆扬
2023-03-14
问题内容

我已经尝试解决这个问题一段时间了,我试图从DB_user列中删除非ASCII字符并尝试将它们替换为空格。但是我不断出错。这是我的数据框的外观:

+ ------------------------------------------------- ----------
| DB_user源计数|                                             
+ ------------------------------------------------- ----------
| ??? /“Ò| Z?)?] ?? C%?? JA 10 |                                       
| ?D $ ZGU; @D ?? _ ??? T(?)B 3 |                                       
| Q`H ?? M'?Y ?? KTK $?Ù‹???ЩJL4 ?? *?_ ?? C 2 |                                        
+ ------------------------------------------------- ----------

我正在使用此功能,这是我在研究SO问题时遇到的。

def filter_func(string):
   for i in range(0,len(string)):


      if (ord(string[i])< 32 or ord(string[i])>126
           break

      return ''

And then using the apply function:

df['DB_user'] = df.apply(filter_func,axis=1)

我不断收到错误:

'ord()需要一个字符,但找到了长度为66的字符串',u'发生在索引2'

但是,我认为通过使用filter_func函数中的循环,可以通过在’ord’中输入一个char来解决这个问题。因此,当它遇到非ASCII字符时,应将其替换为空格。

有人可以帮我吗?

谢谢!


问题答案:

您的代码失败,因为您没有将其应用于每个字符,您将其应用于每个单词和ord错误,因为它需要一个字符,您将需要:

  df['DB_user'] = df["DB_user"].apply(lambda x: ''.join([" " if ord(i) < 32 or ord(i) > 126 else i for i in x]))

您还可以使用链式比较简化连接:

   ''.join([i if 32 < ord(i) < 126 else " " for i in x])

您还可以使用string.printable过滤字符:

from string import printable
st = set(printable)
df["DB_user"] = df["DB_user"].apply(lambda x: ''.join([" " if  i not in  st else i for i in x]))

最快的是使用翻译:

from string import maketrans

del_chars =  " ".join(chr(i) for i in range(32) + range(127, 256))
trans = maketrans(t, " "*len(del_chars))

df['DB_user'] = df["DB_user"].apply(lambda s: s.translate(trans))

有趣的是,它比:

  df['DB_user'] = df["DB_user"].str.translate(trans)


 类似资料:
  • 问题内容: 从网站提取数据时出现奇怪的字符: 如何删除不是非扩展ASCII字符的内容? 问题答案: 正则表达式替换将是最佳选择。使用作为一个例子的字符串,并使用匹配它,这是一个POSIX字符类: 什么是寻找所有可打印字符。相反,查找所有不可打印的字符。不属于当前字符集的所有字符都将被删除。 注意: 使用此方法之前,必须确保当前字符集为ASCII。POSIX字符类同时支持ASCII和Unicode,

  • 问题内容: 有一个像下面这样的数据框,它有一个不干净的列“ id”,它应该是数字列 是否有一种简洁的方法删除行,因为tt和de不是数值 使数据框干净? 问题答案: 您可以使用标准的字符串方法,并将其应用于列中的每个值: 或者,如果您想用作索引,则可以执行以下操作: 编辑。添加时间 虽然情况下与未使用的方法,它比与施加慢几乎两倍于列。另外,我使用pandas添加了选项,它键入的次数更少,但使用起来还

  • 问题内容: 我对此有一个类似的问题:Pandas DataFrame:从一列中的字符串中删除不需要的部分 。 所以我用了: 大多数项目以“ PPI /”开头,但并非全部。似乎当没有’PPI /’后缀的项目遇到此错误时: AttributeError:“ float”对象没有属性“ lstrip” 我在这里想念什么吗? 问题答案: 使用replace: 或string.replace:

  • 问题内容: 我有一个包含非ASCII字符的URI,例如: http://www.abc.de/qq/qq.ww?MIval=typo3_bsl_int_Smtliste&p_smtbez=Schmalbl -ttrigeSomerzischeruchtanb 如何从此URI中删除“ …” 问题答案: 我猜想URL的来源更多是错误的。也许您正在解决错误的问题?从URI中删除“奇怪”字符可能会赋予它完

  • 问题内容: 我得到的用户输入包括非ASCII字符和不可打印的字符,例如 例如: 所需的输出: 使用Java删除它们的最佳方法是什么? 我尝试了以下操作,但似乎不起作用 输出量 问题答案: 您的要求不清楚。Java 中的所有字符都是Unicode字符,因此,如果将其删除,将留下一个空字符串。我假设您的意思是您要删除任何非ASCII,不可打印的字符。 此处, 代表可打印ASCII字符的POSIX字符类

  • 问题内容: 我有一个存储在数据库中的HTML字符串。不幸的是,它包含诸如®的字符,我想在数据库本身中或在我的Python / Django代码中使用“查找替换”将它们替换为HTML等效字符。 关于如何执行此操作的任何建议? 问题答案: 你可以使用ASCII字符为前128个字符,因此获取每个字符的编号,如果超出范围则将其删除 结果 请注意,@其中包括了它,因为毕竟它是一个ASCII字符。如果要剥离特