我有一个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可以保留,尽管短信列中使用的语言是非正式的(正如人们通常在短信中所做的那样).鉴于我有大约200万条记录,实现这一目标的方便方法是什么.
编辑:
我想在sms列中删除任何带有非ascii字符的行.
最佳答案 使用
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),我们使用^来取消它,以便它正在寻找存在在文本的任何地方使用非ascii,我们使用〜来反转这个掩码并使用它来掩盖df