开发者社区> 问答> 正文

如何使用python3将数据框中的一个特定文本列转换为'utf-8'

我有一个数据框,其中多列和一列包含来自各种链接的剪贴文本。我试图将该列转换为utf-8,但是没有用。

这是我的方法:

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 \ x99s很高兴成为...

df = pd.read_excel('data.xlsx',encoding=sys.getfilesystemencoding())
df['text'] = df['text']
print(df['text'])

我得到的文字:

b'#谢谢您,\ xe2 \ x80 \ x99s很高兴来到这里...。

df['text'] = df['text'].apply(lambda x: x.decode('utf-8').strip())

AttributeError:“ str”对象没有属性“ decode”

我尝试了2-3种方法,但是没有用。还有其他选择吗?

使用Python 3.6和jupyter笔记本。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 20:30:01 569 0
1 条回答
写回答
取消 提交回答
  • 假设您为第二行是df ['text'] = df ['text']的示例编写的内容以'结尾。换句话说,`b'#谢谢您,\ xe2 \ x80 \ x99s很高兴来到这里....'

    出于某种原因,您将字节码转换为字符串,因为尝试解码时会看到AttributeError:'str'对象没有属性'decode'。(理想情况下,最好不要陷入这种情况,请参阅此处以获取一些相关的建议。las,继续您所拥有的...) 我想在这一点上您可以删除b'在字符串的开头,在末尾的'`,然后类型转换回字节码。请注意,这将导致反斜杠转义,因此除了现在以适当的方式将字节码解码为字符串外,还需要处理。使用基于此处的方法,您可以转义并解码字节码。

    当df ['text'] = df ['text']且它是一个df ['text'] = df ['text']时,将其与显示为df ['text']`的内容放在一起(类似于注释中的@ rolf82所示)。开头的字符串,从您所拥有的转换将是这样的:

    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来简单地说这是一个原始字符串。根据此处和此处,似乎可以使用.encode('unicode-escape')。decode()代替在前面使用r强制转换为原始字符串,例如:

    "#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())
    

    *如果不起作用,还可以尝试在.encode('unicode-escape')之后省略.decode(),即: ` ` ` 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())

    回答来源:stackoverflow

    2020-03-24 20:30:08
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载