заново.суб erroring с "ожидаемую строку и Байт-как объект"и

Я прочитал несколько постов об этой ошибке, но я все еще могу'т выяснить это. Когда я пытаюсь петли через мою функцию:

def fix_Plan(location):
    letters_only = re.sub("[^a-zA-Z]",  # Search for all non-letters
                          " ",          # Replace all non-letters with spaces
                          location)     # Column and row to search    

    words = letters_only.lower().split()     
    stops = set(stopwords.words("english"))      
    meaningful_words = [w for w in words if not w in stops]      
    return (" ".join(meaningful_words))    

col_Plan = fix_Plan(train["Plan"][0])    
num_responses = train["Plan"].size    
clean_Plan_responses = []

for i in range(0,num_responses):
    clean_Plan_responses.append(fix_Plan(train["Plan"][i]))

Здесь ошибка:

Traceback (most recent call last):
  File "C:/Users/xxxxx/PycharmProjects/tronc/tronc2.py", line 48, in <module>
    clean_Plan_responses.append(fix_Plan(train["Plan"][i]))
  File "C:/Users/xxxxx/PycharmProjects/tronc/tronc2.py", line 22, in fix_Plan
    location)  # Column and row to search
  File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36\lib\re.py", line 191, in sub
    return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or bytes-like object
Комментарии к вопросу (10)
Решение

Как говорится в комментарии, некоторые значения оказались поплавки, а не строк. Вам нужно будет изменить его на строки перед передачей его для повторного.суб. Самый простой способ-это изменить "местоположение" на ул. (местонахождение) при использовании `ре.суб. Это бы'т больно, чтобы сделать это в любом случае, даже если это's уже СПО``.

letters_only = re.sub("[^a-zA-Z]",  # Search for all non-letters
                          " ",          # Replace all non-letters with spaces
                          str(location))
Комментарии (1)

Я полагаю, что лучше было бы использовать повторно.матч (функция). вот пример, который может помочь вам.

import re
import nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt')
sentences = word_tokenize("I love to learn NLP \n 'a :(")
#for i in range(len(sentences)):
sentences = [word.lower() for word in sentences if re.match('^[a-zA-Z]+', word)]  
sentences
Комментарии (0)

самое простое решение-применить функцию STR в Python, чтобы столбец, который вы пытаетесь перебрать.

если вы используете панды это может быть реализовано как

таблицы данных['аргумент']=таблицы данных['аргумент'].применить(ул.)

Комментарии (0)