在我的熊猫数据中有一个列,它存储字节。我相信当我将字节放入dataframe时,字节将被转换为字符串,因为dataframe不支持实际字节作为dtype。所以,列值不是b'1a2b',而是被包装在一个类似于"b'1a2b'"的字符串中。
我将这些值传递到需要字节的一种方法中。当我像这样传递它时,我会得到错误消息:
TypeError: memoryview: a bytes-like object is required, not 'str'在这种情况下,我感到困惑的是编码或解码是否有效,还是有其他方法将包装的字节转换为字节?(我正在使用Python 3)
由于这些值位于dataframe中,所以在字符串->字节->协议缓冲区的转换过程中,我可以使用帮助器方法,因为实际的dataframe可能无法将其存储为字节。例如,my_dataframe.apply(_helper_method_convert_string_to_bytes_to_protobuf)。
发布于 2020-10-21 01:37:36
因此,问题似乎在于您无法从字符串中提取字节对象。当您将字符串传递给函数时,它会抛出一个错误,该函数期待像b'1a2b'这样的字节对象。我的建议是尝试用eval函数包装字符串。比如:
a = "b'1a2b'"
b = eval(a)B是你想要的。您还没有为您的函数共享代码,所以我无法为您修改实际代码。
发布于 2020-10-21 01:53:37
您可以在这里采取几种方法,注意到eval()被认为是错误的实践,最好在可能的情况下避免这一点。
encode()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'>https://stackoverflow.com/questions/64455216
复制相似问题