尝试将Python字典格式化为表时BatchDataset不可订阅

2024-04-27 00:04:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理TensorFlow Load pandas.DataFrame tutorial,并试图修改创建字典片段的代码段的输出:

dict_slices = tf.data.Dataset.from_tensor_slices((df.to_dict('list'), target.values)).batch(16)

for dict_slice in dict_slices.take(1):
     print (dict_slice)

我发现下面的输出很松散,我想把它转换成一种更可读的表格格式

Dictionary output from TensorFlow Tutorial

我试图基于this recommendation格式化for循环 Trying a basic for loop

这给了我BatchDataset不可订阅的错误

Error messages from for loop modification

然后我尝试在dict_切片上使用range和leng函数,这样我就可以成为一个整数索引而不是切片 Modifying dict_slices with range and len

这给了我以下错误(据我所知,因为dict_切片仍然是一个数组,每次迭代都是数组的一个向量,而不是向量的一个索引):

enter image description here


Tags: dataframepandasfor字典tensorflow代码段错误load
1条回答
网友
1楼 · 发布于 2024-04-27 00:04:36

BatchDataset是一个tf.data.Dataset实例,它已通过调用其.batch(..)方法进行批处理。不能为tensorflow数据集“编制索引”,也不能对其调用len函数。我建议您像在第一个代码片段中那样对其进行迭代

然而,在数据集中,您使用的是.to_dict('list'),这意味着字典中的一个键作为值映射到一个列表。基本上,每个键都有“列”,而不是行,这就是您想要的吗?这将使逐行打印(如链接的表格打印示例所示)变得更加困难,因为一行中没有不同的功能。它也不同于官方Tensorflow代码中的示例,其中一个数据点由多个特征组成,而不是一个具有多个值的特征

结合Tensorflow代码和漂亮的打印:

columns = list(df.columns.values)+['target']
dict_slices = tf.data.Dataset.from_tensor_slices((df.values, target.values)).batch(1) # batch = 1 because otherwise you will get multiple dict_slice - target pairs in one iteration below!

print(*columns, sep='\t') 
for dict_slice, target in dict_slices.take(1):
     print(*dict_slice.numpy(), target.numpy(), sep='\t')

这需要一些格式,因为列宽不相等

相关问题 更多 >