目錄
數據清洗的時候一大煩惱就是數據中總有各種亂碼字符,比如!@#¥%……&——+*(){}:“》《?|【】‘;/。,、-=
去掉這些很簡單:
1.亂碼符號種類較少,用replace()
如果只是很少類型的亂碼符號,可以使用replace來替換掉,由於我們只是針對字符串中個別字符進行替換,因此使用str.replace("#","")即可;
#只有一類亂碼字符串
df['name'] = df['name'].str.replace("#","")
#連續多個字符一起替換
df['name'] = df['name'].str.replace("#","").str.replace("&","").str.replace("*","")
2.亂碼字符種類較多,用re.sub()
import re
string = "北京大學beijing985大學@#¥……&{}*@$%)..+_)( "
string_code = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])","",string)
print(string_code )
#輸出:北京大學beijing985大學
這種方法的清洗,我們使用的其實是正則表達式,上述方法是提取了字符串中的中英文和數字,當然你也可以直提取中文,不同字符對應的 unicode 範圍如下所示:
函數 | 說明 |
sub(pattern,repl,string) | 把字符串中的所有匹配表達式pattern中的地方替換成repl |
[^**] | 表示不匹配此字符集中的任何一個字符 |
\u4e00-\u9fa5 | 漢字的unicode範圍 |
\u0030-\u0039 | 數字的unicode範圍 |
\u0041-\u005a | 大寫字母unicode範圍 |
\u0061-\u007a | 小寫字母unicode範圍 |
3.提取字符串中的中文字符
import re
string = "北京大學beijing985大學@#¥……&{}*@$%)..+_)( "
#提取中文字符
string_code = re.sub(u"([^\u4e00-\u9fa5])","",string)
print(string_code )
#輸出:北京大學大學
4.提取字符串中的中文字符和數字
import re
string = "北京大學beijing985大學@#¥……&{}*@$%)..+_)( "
#提取中文字符和數字
string_code = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039])","",string)
print(string_code )
#輸出:北京大學985大學
5.提取其他
至於提取其他字符,可以根據正則表達式的 unicode 範圍,並參照上述三個例子敲代碼。