我正试图从一些缓冲区数据构造一个numpy重新数组,其中保留数组转换为bytes对象时出现的列名非常重要
一个简短的例子说明了我想做什么:
import pandas as pd
import numpy as np
asDF = pd.DataFrame(np.random.random((5,5)),index=np.linspace(-10,0,5),columns=np.linspace(0,1,5)) # Just need a quick way to make a record array with column titles
DFasRec = asDF.to_records()
RecAsStr = DFasRec.tobytes()
# Now I want to get my DFasRec back
recarr = np.frombuffer(RecAsStr)
asArr = np.rec.array(recarr)
注意,我可以假设数据和列标题都是浮动(这是位置数据,因此列标题和数据的第一列表示x/y坐标)
这是可行的——但是,在这个过程中,列标题/数据类型丢失了。如果我知道原始数据类型,我可以恢复原始数组。即:
recarr = np.frombuffer(RecAsStr,dtype=DFasRec.dtype)
但我不能假设我有这个信息。是否有办法在加载过程中提取此数据,或在tobytes()
转换过程中嵌入此数据,以便稍后提取?作为旁注,这个转换过程是在往返SQLite数据库的过程中发生的,因此我不能选择将文件与数据类型等一起保存
因此,您的数据帧是:
重新排列表单将行索引作为一个额外字段(可选):
列名在
dtype
中,但不在数组数据本身中用普通的
arr1 = np.frombuffer(RecAsStr)
:这只是一个一维数组;它可以工作(到目前为止),因为字段都是float,默认的loaddtype是float。该缓冲区没有关于数据类型的信息
重塑允许我们恢复具有行索引值的二维数组
此
bytes
路由不存储任何dtype
信息。我认为这必须单独保存(或恢复)例如:
相关问题 更多 >
编程相关推荐