python - 无法将十六进制代码转换为 unicode 字符,出现 unicodeescape 错误

标签 python pandas dataframe unicode

我有一个带有十六进制值的 Pandas 数据框,如下所示:

df['col1']

<0020>
<0938>
<002E>
<092B>
<092B>
<0916>
<0915>
<0915>
<096F>
<096C>

我想将十六进制值 转换为相应的 unicode 文字。因此,我尝试执行以下操作:

df['col1'] = df['col1'].apply(lambda x : '\u' + str(x)[1:-1])

希望这会将其转换为我的所需的 unicode 文字,但我收到以下错误:

File "<ipython-input-22-891ccdd39e79>", line 1
    df['col1'].apply(lambda x : '\u' +  str(x)[1:-1])
                                      ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape

在 python3 中,当我们尝试以下操作时,我们得到:

>>> string1 = '\u03b4'
>>> print(string1)
>>> δ

因此,我尝试将 \u 添加到给定的字符串中,我还尝试添加 \\u,但显示为 两个反斜杠 。此外,在 \u 之前添加一个 r,最终也会显示两个反斜杠,而不是 unicode 文字。我也尝试了 decode-unicode,但它也没有用。

此外,如果有人能解释rawstrings\u等的概念,那就太好了

最佳答案

哎呀,字面值是为了......字面值!一旦有了变量,就应该使用转换函数,例如 intchr

这里有一列包含字符串。对于列中的每个单元格,您想要删除第一个和最后一个字符,将剩余的字符处理为十六进制值,并获取具有该代码点的 unicode 字符。在 Python 中,它只是读取:

df['col1'].apply(lambda x: chr(int(x[1:-1], 16)))

根据您的值(value)观,它给出:

0     
1    स
2    .
3    फ
4    फ
5    ख
6    क
7    क
8    ९
9    ६

现在为您的错误原因。

\uxxxx 转义序列用于 Python 解析器。当在字符串文字中找到它们时,它们会自动替换为具有该代码点的 unicode 字符。您可以使用 codecs 模块和 unicode_escape 编码来解码包含 actual \u 字符的字符串(这意味着您像在 "\\uxxx" 中一样转义了反斜杠,但是因为您直接拥有代码点的十六进制表示,所以直接使用 chr 会更简单功能。

并且在您的初始代码中,当您编写 '\u' 时,解析器会看到编码字符的初始部分并尝试立即对其进行解码......但找不到六位代码点在它之后,所以它抛出异常。如果你真的想那样做,你必须加倍反斜杠 (\) 来转义它并将它原样存储在字符串中,然后使用 codecs .decode(..., encoding='unicode_escape') 解码字符串,如 @ndclt's answer 所示.但我不建议你这样做。

可在标准 Python 库文档、chr 函数和 codecs 模块中找到引用。

关于python - 无法将十六进制代码转换为 unicode 字符,出现 unicodeescape 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57944504/

相关文章:

python - 如何在整个数据框中搜索特定值并返回其列索引和行索引

python - Dataframe 过滤列(如果它是区间数据类型)

python - 使用 Plotly Python 将 X 轴置于 Y 坐标 0

python - 多处理队列存储列表列表

jquery - 带有多个选择的 web.py Json

python - 如何在 Python 中使用 JSON 从文件的特定列表中检索特定字符串

python - 在 python 中 reshape 数据帧时出现问题 : pivot and groupby not working

r - dplyr - 按组大小过滤

从 CSV 读取某些列时,Python Folium map 不显示?

python - Pandas 无法在转置 DataFrame 上使用 Apply