Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:使用pandas从CSV文件中删除非ascii字符_Python_Pandas_Dataframe - Fatal编程技术网

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

Python:使用pandas从CSV文件中删除非ascii字符,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个csv文件,文本短信采用utf-8编码 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

我有一个csv文件,文本短信采用
utf-8
编码

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

用于筛选非字母数字的行:

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

所以这里的正则表达式模式它查找ascii范围内的十六进制值,最大为128(7f),因此它查找范围为0-128(不包括128)的字符,我们使用
^
来否定这一点,以便它查找文本中任何地方是否存在非ascii,我们使用
~
反转此遮罩,并使用此遮罩df

str.isalnum('å')
->
True
。。。我认为OP不需要任何非ascii字符。@cᴏʟᴅsᴘᴇᴇᴅ 考虑到OP发布的示例,这为什么无效?目前他们还没有说明除过滤垃圾字符外的所有要求。。。说得对。顺便说一句,您的行是倾斜的:p@cᴏʟᴅsᴘᴇᴇᴅ 支持这个字符,否则诺基亚和爱立信手机在他们的国家就没用了,而且我使用的是ipython QTConsole,所以输出看起来就像that@EdChum我已经更新了问题。您正在
department
列上实现此功能,而我希望在
sms
列上实现此功能。此外,
str.isalnum()
为标点返回false
str.isalnum(“test”)->false
。我会尝试正则表达式并进行更新。你能澄清完整的要求是什么吗?例如,你是否试图过滤掉不全是英语的内容?不是ascii?我想筛选“sms”值为非ascii的所有记录。支持非ascii字符,所以我不确定将其限制为ascii@SalA. 您可能希望也可能不希望保留某些非ascii字符,但这完全取决于您的用例。Ed Chum的回答保留了它们,我的回答丢弃了它们。仔细考虑并决定您真正需要的是什么。此外,还可以支持其他语言