从 pandas 中的字符串中删除所有不匹配 unicode 正则表达式模式的字符的更有效方法
A more efficient way to remove all characters that dont match unicode regex pattern from string in pandas
我有一列可以同时包含表情符号和文本,我需要替换子字符串中的所有非表情符号字符并只保留表情符号
emojis
' andá coño'
''
' me da risa'
我{很期待这个 result:_
emojis
''
''
''
这是有效的:
abc123 = [' ','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','0','1','2','3','4','5','6', '7', '8', '9','!',',','.','?','¿','ñ','é','ó','á','ú','í','%','(',')','*','_','-','"','@','/',';',':','¡','=','+','’','[',']','>','“','”']
for i in abc123:
df['emojis'] = df['emojis'].str.replace(i, "", regex=False)
df['emojis'] = df['emojis'].str.replace(i.upper(), "", regex=False)
只是时间效率不高,而且这样的迭代对脚本性能有巨大影响,我尝试使用正则表达式替换,例如:
df['emojis'] = df['emojis'].replace("[^a-zA-Z0-9-\().:«»~-]","", regex=True, inplace=True)
但这会替换所有字符,包括表情符号。
有什么建议可以提高效率吗?
- 删除
'^'
,如评论中 Mad Physicist 所述
'\s'
获取空格
'\w'
获取所有单词字符,包括'á ñ'
'\d'
获取所有数字
import pandas as pd
from string import punctuation as punc
# dataframe
df = pd.DataFrame({'emojis': ["' andá coño97979!)(,.:'", "''", "' me da risa'"]})
emojis
0 ' andá coño97979!)(,.:'
1 ''
2 ' me da risa'
df.emojis.replace(f"[\s\w\d\({punc}).:«»~-]","", regex=True, inplace=True)
emojis
0
1
2
我有一列可以同时包含表情符号和文本,我需要替换子字符串中的所有非表情符号字符并只保留表情符号
emojis
' andá coño'
''
' me da risa'
我{很期待这个 result:_
emojis
''
''
''
这是有效的:
abc123 = [' ','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','0','1','2','3','4','5','6', '7', '8', '9','!',',','.','?','¿','ñ','é','ó','á','ú','í','%','(',')','*','_','-','"','@','/',';',':','¡','=','+','’','[',']','>','“','”']
for i in abc123:
df['emojis'] = df['emojis'].str.replace(i, "", regex=False)
df['emojis'] = df['emojis'].str.replace(i.upper(), "", regex=False)
只是时间效率不高,而且这样的迭代对脚本性能有巨大影响,我尝试使用正则表达式替换,例如:
df['emojis'] = df['emojis'].replace("[^a-zA-Z0-9-\().:«»~-]","", regex=True, inplace=True)
但这会替换所有字符,包括表情符号。
有什么建议可以提高效率吗?
- 删除
'^'
,如评论中 Mad Physicist 所述 '\s'
获取空格'\w'
获取所有单词字符,包括'á ñ'
'\d'
获取所有数字
import pandas as pd
from string import punctuation as punc
# dataframe
df = pd.DataFrame({'emojis': ["' andá coño97979!)(,.:'", "''", "' me da risa'"]})
emojis
0 ' andá coño97979!)(,.:'
1 ''
2 ' me da risa'
df.emojis.replace(f"[\s\w\d\({punc}).:«»~-]","", regex=True, inplace=True)
emojis
0
1
2