Python:使用pandas从CSV文件中删除非ascii字符

时间:2017-09-07 10:42:46

标签: python pandas dataframe

我有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字符的任何行。

1 个答案:

答案 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