programing

re."예기된 문자열 또는 바이트와 유사한 개체"로 하위 오류가 발생

newsource 2023. 8. 23. 21:49

re."예기된 문자열 또는 바이트와 유사한 개체"로 하위 오류가 발생

저는 이 오류에 대한 게시물을 여러 번 읽었지만 아직도 이해할 수 없습니다.내 기능을 반복하려고 할 때:

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

댓글에서 말씀하신 것처럼 일부 값은 문자열이 아닌 플로트로 표시되었습니다.에 전달하기 전에 문자열로 변경해야 합니다.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))

가장 간단한 솔루션은 Python을 적용하는 것입니다. str루프하려는 열에 대한 함수입니다.

사용 중인 경우pandas이는 다음과 같이 구현될 수 있습니다.

dataframe['column_name']=dataframe['column_name'].apply(str)

저도 같은 문제가 있었습니다.그리고 제가 무언가를 할 때마다, 그 문제가 해결되지 않았다는 것은 매우 흥미로운 일입니다. 제가 그 끈에 두 개의 특별한 문자가 있다는 것을 깨닫기 전까지는 말이죠.

예를 들어, 텍스트에는 두 개의 문자가 있습니다.

&lrm; (Left-to-Right Mark) 그리고&zwnj; (제로비조인)

저에게 해결책은 이 두 글자를 삭제하는 것이었고 문제는 해결되었습니다.

import re
mystring = "&lrm;Some Time W&zwnj;e"
mystring  = re.sub(r"&lrm;", "", mystring)
mystring  = re.sub(r"&zwnj;", "", mystring)

이것이 저처럼 문제가 있는 사람에게 도움이 되었기를 바랍니다.

re.match() 함수를 사용하는 것이 더 나을 것 같습니다.여기 당신을 도울 수 있는 예가 있습니다.

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

Python에서의 내 경험에 따르면, 이것은 re.findall() 함수에 사용된 두 번째 인수의 None 값에 의해 발생합니다.

import re
x = re.findall(r"\[(.*?)\]", None)

하나는 이 코드 샘플로 오류를 재현합니다.

이 오류 메시지를 방지하려면 null 값을 필터링하거나 처리에서 제외할 조건을 추가할 수 있습니다.

언급URL : https://stackoverflow.com/questions/43727583/re-sub-erroring-with-expected-string-or-bytes-like-object