我有DataFrame(pandas):
data1 = pandas.DataFrame(['привет, Вася', 'как дела?', 'уиии!!'])
如您所见,它包含unicode符号(西里尔文):
>>> data1
0
0 привет, Вася
1 как дела?
2 уиии!!
我尝试从dataframe列中删除所有特定符号。 我试过了:
data1.apply(replace ???)
data1[0].replace()
甚至是lambda的东西。
但我不知道如何正确地呼叫replace
。因此,我想显示所有符号必须按范围删除:
x in '!@#$%^&*()'
或
if chr(x) not in range(1040,1072) # chr() of cyrillic
答案 0 :(得分:4)
您可以使用unicode RegEx (?u)
:
来源DF:
In [30]: df
Out[30]:
col
0 привет, Вася
1 как дела?
2 уиии 23 45!!
3 давай Вася, до свидания!
解决方案(删除所有数字,所有尾随空格和所有非字符,空格和问号除外):
In [36]: df.replace(['\d+', r'(?u)[^\w\s\?]+', '\s*$'], ['','',''], regex=True)
Out[36]:
col
0 привет Вася
1 как дела?
2 уиии
3 давай Вася до свидания
答案 1 :(得分:3)
好的,IIUC,使用string.punctuation
并使用replace
-
import string
data1.replace(r'[{}]'.format(string.punctuation), '', regex=True)
0
0 привет Вася
1 как дела
2 уиии
其中,
string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
如果你想排除一个特定的字符/字符集,这里有一种方法,使用set.difference
-
c = set(string.punctuation)
p_to_exclude = ['?', ...]
c = c.difference(p_to_exclude)
现在,您可以像以前一样使用c
-
data1.replace(r'[{}]'.format(re.escape(''.join(c))), '', regex=True)
0
0 привет Вася
1 как дела?
2 уиии
此处的另一件事是使用re.escape
,因为[
和]
被视为元字符,需要进行转义。
答案 2 :(得分:2)
也许你在寻找替代,[!@...]
在这里相当于(! or @...)
,即:
data1[0].str.replace('[!@#$%^&*()]','')
0 привет, Вася
1 как дела?
2 уиии
Name: 0, dtype: object
如果您要在整个数据框中替换puntuations,请转到
data1.replace('[!@#$%^&*()]','',regex=True)
根据评论,您可能正在寻找正则表达式
data1.replace('[^\w\s]','',regex=True)