Более эффективный способ удалить все символы, которые не соответствуют шаблону регулярного выражения Unicode, из строки в pandas - PullRequest
0 голосов
/ 17 июня 2020

У меня есть столбец, который может содержать смайлики и текст вместе, мне нужно заменить все символы, не относящиеся к смайликам, из подстрок и оставить только смайлы. 1004 *

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)

, но при этом заменяются все символы, включая смайлики.

есть ли предложения, чтобы сделать это более эффективным?

1 Ответ

1 голос
/ 17 июня 2020
  • Удалить '^', как указано Безумным физиком в комментариях
  • '\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    ???
...