加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:03:08 所属栏目:Python 来源:网络整理
导读:我有一个utf-8编码的文本短信的csv文件. import pandas as pddata = pd.read_csv('my_data.csv',sep=',')data.head() 它的输出如下: id city department sms category01 khi revenue quk respns. 102 lhr revenue good. 103 lhr revenue ?hh2hhh 004 i
我有一个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      ?hh2hhh               0
04    isb      accounts     ?x?1?i?üe÷ü??8i            0
05    isb      accounts     %a??‘??$?a?±t%r??????a£    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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读