StaticFrame运行时错误:存储标签{label}不是字符串;为StoreConfig提供label_encode



我正试图将一个yarn导出到_zip_npz,但遇到了此运行时错误。我到底该如何解决这个问题?例如,这里有一个玩具示例,它很好地遵循了我的用例。我该如何使这个例子起作用?

from pathlib import Path
import numpy as np
import static_frame as sf
path = Path(f'datasets')
npz_file = path / 'npz_yarn_test.zip'
frame_data = np.array([[1,2,3],[4,5,6],[7,8,9]])
frames = []
for i in range(1,4):
frame = sf.Frame(frame_data, columns=('first', 'second', 'third'), name = f'frame_{i}')
frames.append(frame)
buses = []
for i in range(1,4):
bus = sf.Bus.from_frames(frames, name = f'bus_{i}')
buses.append(bus)
sf.Yarn.from_buses(buses, retain_labels=True).to_zip_npz(npz_file)

所以我从StaticFrame GitHub上的一个响应中得到了答案。

"这里的问题是,您创建的Yarn有一个IndexHierarchy,因为您设置retain_labels=True:

>>> yn
<Yarn>
<IndexHierarchy>
bus_1            frame_1 Frame
bus_1            frame_2 Frame
bus_1            frame_3 Frame
bus_2            frame_1 Frame
bus_2            frame_2 Frame
bus_2            frame_3 Frame
bus_3            frame_1 Frame
bus_3            frame_2 Frame
bus_3            frame_3 Frame
<<U5>            <<U7>   <object>

当我们写入NPZ时,我们使用Yarn标签来命名文件存储中的组件,并且这些组件必须是字符串。然而,从IndexHierarchy中给出的标签是元组。我们可以使用StoreConfig对这些元组进行编码和解码,提供一个编码(转到字符串(和解码(从字符串返回标签(的函数。因此,要将此Yarn往返于ZIP NPZ,我们可以执行以下操作:

>>> yn.to_zip_npz('/tmp/npz.zip', config=sf.StoreConfig(label_encoder=str))
>>> import ast
>>> sf.Bus.from_zip_npz('/tmp/npz.zip', config=sf.StoreConfig(label_decoder=ast.literal_eval), 
index_constructor=sf.IndexHierarchy.from_labels)
<Bus>
<IndexHierarchy>
bus_1            frame_1 <FrameDeferred>
bus_1            frame_2 <FrameDeferred>
bus_1            frame_3 <FrameDeferred>
bus_2            frame_1 <FrameDeferred>
bus_2            frame_2 <FrameDeferred>
bus_2            frame_3 <FrameDeferred>
bus_3            frame_1 <FrameDeferred>
bus_3            frame_2 <FrameDeferred>
bus_3            frame_3 <FrameDeferred>
<<U5>            <<U7>   <object>

请注意,虽然label_edecoder会给我们返回元组,但我们仍然需要提供index_constructor来创建IndexHierachy">

相关内容

最新更新