使用 Python3 将 Bytes 对象转换为 Pandas 数据帧会导致空数据帧。为什么?

Converting a Bytes object into a Pandas dataframe with Python3 results in an empty dataframe. Why?

我正在阅读有关字节库和 Pandas 的内容,我认为以下 post 中的答案应该对我有用:

然而,它们都不起作用。

我有一个包含一些内容的 CSV 文件。当我将它加载到 Odoo 时,它将 returns 文件转换为 Bytes 对象。我想用 pandas 读取这个 Bytes 对象并将其转换为 dataframe 以便使用 dataframe 方法。

Bytes 对象出现在我的 class 的属性 file_to_import 中(这就是为什么您会在我的代码中看到 self.file_to_import)。如果我显示它的类型 returns <class 'bytes'>。如果我解码它,我会得到它各自的字符串:

ZGVmYXVsdF9jb2RlO25hbWU7ZGVzY3JpcHRpb25fc2FsZTtjYXRlZ29yeV9pZC9pZDtzdGFuZGFyZF9wcmljZTtsaXN0X3ByaWNlOzs7dHlwZTtiYXJjb2RlO3NlbGxlcl9pZHMvbmFtZS9pZDtzZWxsZXJfaWRzL3Byb2R1Y3RfbmFtZTtzZWxsZXJfaWRzL3Byb2R1Y3RfY29kZQpXNS5GLTA2NjY2ODtOZXN0YSBDaHJvbWUgNjA7TmVzdGEgQ2hyb21lIDYwLiBDYWxkZXJhIGRlIGNvbmRlbnNhY2nDs24gbXVyYWwgZGUgZ2FzIGRlIDYwIGtXLCBjb24gcXVlbWFkb3IgZGUgcHJlbWV6Y2xhIGUgaW50ZXJjYW1iaWFkb3IgcGlyb3R1YnVsYXIgYXV0b2xpbXBpYWJsZSBkZSBhY2VybyBpbm94aWRhYmxlLCByYXRpbyBkZSBtb2R1bGFjacOzbiAxMDoxMDA7Q2FsZGVyYXMgeSBjYWxlbnRhZG9yZXMgZGUgYWd1YTsxMTI5OzM2NTA7U0k7U0k7cHJvZHVjdDs7QUlDIFNBOzYwIGtXIFdhbGwgaHVuZyBib2lsZXIgaW4gY2FydG9uIGJveCB3aXRoOiBib2lsZXIgQW5jbGFqZSBwYXJlZCwgcGxhc3RpYyBzaXBob24gd2l0aCBnYXNrZXQgYW5kIGNsaXAsIHVzZXIncyBtYW51YWwgaW4gRW5nbGlzaCBsYW5ndWFnZTtXNS5GLTA2NjY2OApXMS5GLTA2NjY2OTtTYWZhcmkgMTAwMDtTYWZhcmkgMTAwMCBwbHVzIDI4OTM0MDE7Q2FsZGVyYXMgeSBjYWxlbnRhZG9yZXMgZGUgYWd1YTsxMTI5OzM2NTA7U0k7U0k7cHJvZHVjdDs7QUlDIFNBOzYwIGtXIFdhbGwgaHVuZyBib2lsZXIgaW4gY2FydG9uIGJveCB3aXRoOiBib2lsZXIgQW5jbGFqZSBwYXJlZCwgcGxhc3RpYyBzaXBob24gd2l0aCBnYXNrZXQgYW5kIGNsaXAsIHVzZXIncyBtYW51YWwgaW4gRW5nbGlzaCBsYW5ndWFnZTtXMS5GLTA2NjY2OQo7OztTdXN0aXR1aXIgQ2FsZGVyYXMgeSBjYWxlbnRhZG9yZXMgZGUgYWd1YSBwb3IgY8OzZGlnbyByYXJvO8K/UHJlY2lvIGRlIGNvbXByYSBkZSB0b2RvcyBsb3MgcHJvdmVlZG9yZXMgbyBzw7NsbyBkZSBlc3RlIHByb3ZlZWRvciBjb25jcmV0bz87O8K/Pzs7OztTdXN0aXR1aXIgQUlDIFNBIHBvciBzdSBjw7NkaWdvIHJhcm87Owo=

看起来不错,所以这应该足够了:

from io import BytesIO
import pandas as pd

df = pd.read_csv(BytesIO(self.file_to_import))

然而,df 没有任何行,如果我检查 df.empty,它 returns True,所以 dataframe 没有任何信息。如果我在尝试将其转换为 dataframe 之前检查 BytesIO 对象的大小,它 returns 1376 字节,这似乎没问题,因为 Dolphin 显示大小为 1,0文件的 KiB (1.031)。

x = BytesIO(self.file_to_import)
_logger.critical(x.getbuffer().nbytes)
df = pd.read_csv(x))

谁能告诉我为什么会这样?为什么 dataframe 是空的?

您的字符串已 base64 编码。使用前需要解码:

import base64

s = b"ZGVmYXVsdF9jb2RlO2...Jhcm87Owo="
s = base64.decodebytes(s)