Предположим, что вы написали для примера, где вторая строка df['text'] = df['text']
оканчивается на '
. Другими словами, b'#Thank you, it\xe2\x80\x99s good to be here....'
:
По какой-то причине у вас есть байт-код, который был приведен к строке, потому что вы видите AttributeError: 'str' object has no attribute 'decode'
, когда пытаетесь ее декодировать. (В идеале было бы лучше, если бы не попал в эту ситуацию, см. здесь , чтобы получить совет, который выглядит уместным. Увы, следуя тому, что у вас есть ...)
Я думаю, что в этом Вы можете удалить b'
в начале строки и '
в конце дальнего конца и привести обратно к байтовому коду . Обратите внимание, что это приведет к тому, что обратные косые черты будут экранированы, и это необходимо решать, в дополнение к правильному декодированию байтового кода в строку. Используя подход, основанный на здесь , вы можете экранировать и декодировать байт-код.
Соедините это (вроде как @ rolf82, показанный в комментариях) с тем, что вы показываете как df['text']
, когда df['text'] = df['text']
и что это строка в начале, преобразование из того, что у вас есть, будет выглядеть так:
a = "b'#Thank you, it\xe2\x80\x99s good to be here'"
# But we only want the parts between the ''.
s = bytes(r"#Thank you, it\xe2\x80\x99s good to be here","utf-8")
import codecs
print(codecs.escape_decode(s)[0].decode("utf-8"))
Это дает:
#Thank you, it’s good to be here
Что это такое? мы хотим.
Теперь интеграция с Pandas потребует чего-то дополнительного, потому что мы не можем просто сказать, что это необработанная строка, добавив r
впереди. Исходя из здесь и здесь , кажется, что использование r
спереди для приведения к необработанной строке можно заменить на .encode('unicode-escape').decode()
, например:
"#Thank you, it\xe2\x80\x99s good to be here".encode('unicode-escape').decode()
Поэтому, собрав все воедино, я заменил бы вашу вторую строку следующим образом:
import codecs
df['text'] = df['text'].apply(lambda x: codecs.escape_decode(bytes(x[2:-1].encode('unicode-escape').decode(), "utf-8"))[0].decode('utf-8').strip())
Если это не сработает, также попробуйте пропустить .decode()
после .encode('unicode-escape')
, то есть:
```python
import codecs
df['text'] = df['text'].apply(lambda x: codecs.escape_decode(bytes(x[2:-1].encode('unicode-escape'), "utf-8"))[0].decode('utf-8').strip())