我有utf-8
编码的文字短信的csv文件。
import pandas as pd
data = pd.read_csv('my_data.csv', sep=',')
data.head()
输出如:
id city department sms category
01 khi revenue quk respns. 1
02 lhr revenue good. 1
03 lhr revenue †h\0h2h\0hh\ 0
04 isb accounts ?xœ1øiûüð÷üœç8i 0
05 isb accounts %â¡ã‘ã¸$ãªã±t%rã«ãÿã©â£ 0
我想删除sms
列中有垃圾值的所有记录/行,例如记录3,4和5.可能它们是用英语以外的语言编写的我不太确定发生了什么这些记录。记录1和2可以保留,尽管sms
列中使用的语言是非正式的(正如人们通常在短信中所做的那样)。考虑到我有大约200万条记录,实现这一目标的方法是什么。
修改
我想删除sms
列中包含非ascii字符的任何行。
答案 0 :(得分:8)
使用str.isalnum
过滤不是字母数字的行:
In[46]:
df[df['sms'].str.isalnum()]
Out[46]:
id city department sms category
0 1 khi revenue quk respns. 1
1 2 lhr revenue good. 1
<强>更新强>
如果你真的想要过滤掉任何包含非ascii字符的行,那么你可以使用正则表达式模式:
In[72]:
df[~df['sms'].str.contains(r'[^\x00-\x7F]+')]
Out[72]:
id city department sms category
0 1 khi revenue quk respns. 1
1 2 lhr revenue good. 1
所以正则表达式'[^\x00-\x7F]+'
在这里查找ascii范围内的十六进制值,最多128(7f),因此它会查找0-128范围内的字符(不包括128),我们使用{ {1}}以便它在文本中的任何地方寻找非ascii的存在,我们使用^
反转此掩码并使用它来掩盖df