Ik heb meerdere berichten over deze fout gelezen, maar ik kom er nog steeds niet uit. Wanneer ik mijn functie probeer te doorlopen:
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]))
Dit is de fout:
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
Antwoord 1, autoriteit 100%
Zoals je in de opmerkingen hebt aangegeven, leken sommige waarden floats te zijn, geen strings. Je moet het veranderen in strings voordat je het doorgeeft aan re.sub
. De eenvoudigste manier is om location
te wijzigen in str(location)
bij gebruik van re.sub
. Het zou toch geen kwaad kunnen om het toch te doen, zelfs als het al een str
is.
letters_only = re.sub("[^a-zA-Z]", # Search for all non-letters
" ", # Replace all non-letters with spaces
str(location))
Antwoord 2, autoriteit 11%
De eenvoudigste oplossing is om de functie Pythonstr
toe te passen op de kolom die u probeert door te lussen.
Als je pandas
gebruikt, kan dit worden geïmplementeerd als:
dataframe['column_name']=dataframe['column_name'].apply(str)
Antwoord 3
Ik veronderstel dat het beter zou zijn om de functie re.match() te gebruiken. hier is een voorbeeld dat u kan helpen.
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
Antwoord 4
Ik had hetzelfde probleem. En het is heel interessant dat elke keer dat ik iets deed, het probleem niet werd opgelost totdat ik me realiseerde dat er twee speciale tekens in de tekenreeks zitten.
Voor mij heeft de tekst bijvoorbeeld twee tekens:
‎
(links- Rechts Mark ) en ‌
(Zero-breedte niet-joiner )
De oplossing voor mij was om deze twee tekens te verwijderen en het probleem is opgelost.
import re
mystring = "‎Some Time W‌e"
mystring = re.sub(r"‎","",mystring)
mystring = re.sub(r"‌","",mystring)
Ik hoop dat dit iemand heeft geholpen die een probleem is zoals ik.