python – 从pandas列中删除非ASCII字符
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 从pandas列中删除非ASCII字符,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1965字,纯文字阅读大概需要3分钟。
内容图文
我一直试图解决这个问题.我试图从DB_user列中删除非ASCII字符并尝试用空格替换它们.但我不断收到一些错误.这就是我的数据框的外观:
+----------------------------------------------------------- | DB_user source count | +----------------------------------------------------------- | ???/"Ò|Z?)?]??C %??J A 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() expected a character, but string of length 66 found', u'occurred at index 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)
内容总结
以上是互联网集市为您收集整理的python – 从pandas列中删除非ASCII字符全部内容,希望文章能够帮你解决python – 从pandas列中删除非ASCII字符所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。