如何将包装字节转换为 Python Dataframe 中的实际字节?

How to Convert Wrapped Bytes to Actual Bytes in Python Dataframe?

我的 pandas 数据框中有一列存储字节。我相信当我将字节放入数据帧时,字节会被转换为字符串,因为数据帧不支持将实际字节作为数据类型。因此,列值不是 b'1a2b',它最终被包裹在这样的字符串中:"b'1a2b'".

我将这些值传递给需要字节的 a method。当我像这样 ParseFromString("b'1a2b'") 传递它时,我收到错误消息:

TypeError: memoryview: a bytes-like object is required, not 'str'

我很困惑在这种情况下编码或解码是否有效,或者是否有其他方法可以将包装的字节转换为字节? (我正在使用 Python 3)

由于这些值在数据帧中,我可以在从字符串-->字节-->协议缓冲区的转换过程中使用辅助方法,因为实际的数据帧可能无法将其存储为字节。例如,my_dataframe.apply(_helper_method_convert_string_to_bytes_to_protobuf).

所以问题似乎是您无法从字符串中提取字节对象。当您将字符串传递给需要像 b'1a2b' 这样的字节对象的函数时,它会抛出错误。我的建议是尝试将您的字符串包装在 eval 函数中。喜欢:

a = "b'1a2b'"
b = eval(a)

b 就是你想要的。您还没有分享您的功能代码,所以我无法为您修改实际代码。

您可以在这里采取一些方法,注意 eval() 被认为是不好的做法,最好尽可能避免这种做法。

  1. 将您的字节表示存储为字符串并encode()调用函数
  2. 从字符串中提取字节表示,然后调用 encode() 函数

虽然如果可能,最好在导入数据时将 bytes 存储为 1a2b,如果不可能,您可以使用 regex 提取内容b'' 之间的字符串并将结果传递给 encode().

import re

string = "b'1a2b'"

re.search(r"(?<=').*(?=')", string).group().encode()

输出:

#b'1a2b'
type(re.search(r"(?<=').*(?=')", string).group().encode())
#<class 'bytes'>