Ожидаемая строка или байтоподобный объект

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

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

Ответы

Ответ 1

Как вы отметили в комментариях, некоторые из значений выглядели как плавающие, а не строки. Вам нужно будет изменить его на строки, прежде чем передавать его в re.sub. Самый простой способ - изменить location на str(location) при использовании re.sub. Было бы больно делать это в любом случае, даже если это уже была str.

letters_only = re.sub("[^a-zA-Z]",  # Search for all non-letters
                          " ",          # Replace all non-letters with spaces
                          str(location))