繁体   English   中英

使用 Python3 将字节 object 转换为 Pandas dataframe 会导致空的 Z6A8064B5DF479453550055C。 为什么?

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

我正在阅读有关 Bytes 库和 Pandas 的信息,我认为以下帖子中的答案应该对我有用:

如何将字节数据转换为 python pandas dataframe?

但是,它们都没有工作。

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

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

/UHJlY2lvIGRlIGNvbXByYSBkZSB0b2RvcyBsb3MgcHJvdmVlZG9yZXMgbyBzw7NsbyBkZSBlc3RlIHByb3ZlZWRvciBjb25jcmV0bz87O8K/Pzs7OztTdXN0aXR1aXIgQUlDIFNdHBvciBzdcm8w7WoK

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

from io import BytesIO
import pandas as pd

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

但是, df没有任何行,如果我检查df.empty ,它会返回True ,因此dataframe没有任何信息。 如果我在尝试将其转换为dataframe之前检查BytesIO object 的大小,它会返回 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM