Python 如何删除包含3个以上非ascii字符的行
我想删除Python 如何删除包含3个以上非ascii字符的行,python,pandas,dataframe,Python,Pandas,Dataframe,我想删除sms列包含超过3个垃圾值的所有记录/行,简单地说,我想删除下面给定数据帧中的第4行和第5行 id city department sms category 01 khi revenue quk respns. 1 02 lhr revenue good. 1 03 lhr revenue
sms
列包含超过3个垃圾值的所有记录/行,简单地说,我想删除下面给定数据帧中的第4行和第5行
id city department sms category
01 khi revenue quk respns. 1
02 lhr revenue good. 1
03 lhr revenue greatœ1øið 0
04 isb accounts ?xœ1øiûüð÷üœç8i 0
05 isb accounts %â¡ã‘ã¸$ãªã±t%rã«ãÿã©â£ 0
预期数据帧:
id city department sms category
1 khi revenue quk respns. 1
2 lhr revenue good. 1
3 lhr revenue greatœ1øið 0
ascii\u string=set(“!”、-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ` abcdefghijklmnopqrstuvxyz{124;}~”)
对于df.iterrows()中的r,j:
对于k,j.iteritems()中的数据:
总计数=长度(数据)
ascii\u计数=总和(数据中c的ascii\u字符串中的c)
非ascii计数=总计数-ascii计数
如果非ascii计数>3:
#删除行
df=df.下降([r])
打破
ascii表仅扩展到127,这意味着如果我们执行ord()
并得到大于127的值,则该字符不是有效的ascii字符
使用它,我们可以计算非Ascii字符的数量,并且只返回True
,其中只有3个或更少
df.drop(df.loc[df["sms"].apply(lambda x: False if len([i for i in x if ord(i) > 127]) <= 3 else True)].index)
我们可以使用来计算列sms
中每个字符串中正则表达式模式[^\x00-\x7F]
(与单个非ASCII字符匹配)的出现次数,然后使用来创建布尔掩码
,并使用此掩码来过滤行:
m = df['sms'].str.count(r'[^\x00-\x7F]').gt(3)
df = df[~m]
结果:
id city department sms category
0 1 khi revenue quk respns. 1
1 2 lhr revenue good. 1
2 3 lhr revenue greatœ1øið 0
到现在为止你都试了些什么?谢谢,这回答了我的问题
m = df['sms'].str.count(r'[^\x00-\x7F]').gt(3)
df = df[~m]
id city department sms category
0 1 khi revenue quk respns. 1
1 2 lhr revenue good. 1
2 3 lhr revenue greatœ1øið 0