从 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