首页 > 解决方案 > 如何从 DataFrame 创建一个 tf.data.Dataset,其中一列的每个条目都是固定长度的 Numpy 数组或列表?

问题描述

如何从 DataFrame 创建一个 tf.data.Dataset,其中一列的每个条目都是固定长度的 Numpy 数组或列表?

我收到此错误,ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray)。

df = pd.DataFrame([[1,2,np.array([3,4])], [4,5,np.array([6,7])]], columns=['col1', ' col2','col3'])

ds = tf.data.Dataset.from_tensor_slices(dict(df))

标签: tensorflowtensorflow-datasets

解决方案


对于混合数据类型,使用 Dataset.from_generator:

def iter_to_gen(it):
    def f():
        for x in it:
            yield x
    return f


ds = Dataset.from_generator( iter_to_gen(map(tuple, df.values)),  (tf.int32, tf.int32, tf.int32))
print(list(ds.as_numpy_iterator()))

产生:

[(1, 2, array([3, 4], dtype=int32)), (4, 5, array([6, 7], dtype=int32))]

推荐阅读