Ich habe mehrere Beiträge zu diesem Fehler zu lesen, aber ich kann immer noch nicht herausfinden, es. Wenn ich versuche, Schleife durch meine Funktion:
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]))
Hier ist der Fehler:
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
Wie Sie in den Kommentaren angegeben haben, scheinen einige der Werte Floats und keine Strings zu sein. Sie müssen sie in Strings ändern, bevor Sie sie an re.sub
übergeben. Am einfachsten ist es, location
in str(location)
zu ändern, wenn Sie re.sub
verwenden. Es kann nicht schaden, dies zu tun, auch wenn es bereits ein "str" ist.
letters_only = re.sub("[^a-zA-Z]", # Search for all non-letters
" ", # Replace all non-letters with spaces
str(location))
Ich nehme an, besser wäre es, die Funktion re.match() zu verwenden. Hier ist ein Beispiel, das Ihnen helfen könnte.
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
Die einfachste Lösung ist die Anwendung der Python-Str-Funktion auf die Spalte, durch die Sie eine Schleife ziehen wollen.
Wenn Sie Pandas verwenden verwenden, kann dies implementiert werden als
Datenrahmen['Spaltenname']=Datenrahmen['Spaltenname'].apply(str)