首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python3将数据帧中的特定文本列转换为“utf-8”

如何使用python3将数据帧中的特定文本列转换为“utf-8”
EN

Stack Overflow用户
提问于 2020-03-11 16:34:59
回答 1查看 1.3K关注 0票数 1

我有一个dataframe,多个列和一个列包含从各种链接中刮来的文本。我试图将该列转换为utf-8,但它没有工作。

以下是我的做法:

代码语言:javascript
复制
df = pd.read_excel('data.xlsx',encoding=sys.getfilesystemencoding())
df['text'] = df['text'].apply(lambda x: x.encode('utf-8').strip())
print(df['text'])

我收到了一些ascii代码的短信:

B‘b’#谢谢,它\xE2\x80\x99很好.

代码语言:javascript
复制
df = pd.read_excel('data.xlsx',encoding=sys.getfilesystemencoding())
df['text'] = df['text']
print(df['text'])

我收到短信:

B‘#谢谢你,很高兴能在这里.

代码语言:javascript
复制
df['text'] = df['text'].apply(lambda x: x.decode('utf-8').strip())

AttributeError:'str‘对象没有属性'decode’

我尝试了2-3种方法,但都没成功。有别的选择吗?

使用Python3.6和jupyter笔记本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-12 17:24:08

假设您为第二行df['text'] = df['text']'结尾的示例所写的内容。换句话说,b'#Thank you, it\xe2\x80\x99s good to be here....'

由于某些原因,您的字节码已经被转换为字符串,因为您在尝试解码时看到了AttributeError: 'str' object has no attribute 'decode'。(理想情况下,最好不要陷入这种情况,请参阅这里获得一些看起来相关的建议。唉,用你所拥有的.)

我认为在这一点上,您可以在字符串的开头删除b',在远端删除',并删除类型转换为字节码。请注意,这将导致反斜杠被转义,因此除了现在以正确的方式将字节代码解码为字符串之外,还需要处理这些问题。使用基于这里的方法,您可以对字节码进行转义和解码。

将它与显示为df['text']的内容结合起来(类似于注释中的@rolf82 82),当df['text'] = df['text']在开始时是一个字符串时,您所拥有的转换如下:

代码语言:javascript
复制
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"))

这意味着:

代码语言:javascript
复制
#Thank you, it’s good to be here

这就是我们想要的。

现在,将其与Pandas集成将需要额外的东西,因为我们不能简单地说这是一个原始字符串,在前面添加r。基于这里这里,似乎可以使用前面的r将原始字符串转换为.encode('unicode-escape').decode(),如下所示:

代码语言:javascript
复制
"#Thank you, it\xe2\x80\x99s good to be here".encode('unicode-escape').decode()

所以,把所有这些都放在一起,我会把你的第二行替换为:

代码语言:javascript
复制
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'),即:

代码语言:javascript
复制
```python

进口码

df‘’text‘=df’‘text’.(lambda x: codecs.escape_decode(bytes(x2:-1.encode('unicode-escape'),“utf-8”).decode(‘utf-8’).strip()

代码语言:javascript
复制
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60640682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档