从未标记的csv导入时,在tensorflow数据集中标记列的正确方法是什么?

2024-04-25 09:44:03 发布

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

问题与MWE

我在一个csv文件中有一些数据,但没有在列上标记标题,例如:labels = ["a", "b", "c", "d"]。我正在使用Numpy将数据导入到Tensorflow数据集中。我的MWE看起来像这样:

import tensorflow as tf

dataset = tf.convert_to_tensor(np.loadtxt("csvfile.csv", delimiter=',', dtype="uint32"), dtype=tf.uint32)

当我查看dataset的输出时,我看到了我所期望的:

<tf.Tensor: id=2, shape=(1545, 4), dtype=uint32, numpy=
array([[    68,    442,    730,  40000],
       [    71,    857,    609, 150000],
       [    71,    857,    609, 110000],
       ...,
       [   295,    615,    145,  50000],
       [   297,    443,    854,  10000],
       [   298,    541,    309,  20000]], dtype=uint32)>

此时在脚本中标记这些列的最佳方式是什么

显而易见的答案是行不通的

我不想在启动python代码之前编辑CSV文件,例如在4列上手动插入标题。在我的情况下,我不能假设我将始终能够访问CSV文件

我试过的

我试图用以下方法将标题钉在numpy对象的顶部:

fff = np.loadtxt("csvfile.csv", delimiter=',', dtype="uint32")
fff = np.vstack((np.array(("a", "b", "c", "d")), fff))
dataset = convert_to_tensor(fff, dtype=tf.uint32)

但由于混合编码,这显然是失败的


Tags: 文件csvto数据标记标题convertfff
4条回答

这可以在不改变原始数据的情况下使用字典来完成。在这种情况下:

import tensorflow as tf
import numpy as np

fff = np.loadtxt("csvfile.csv", delimiter=',', dtype="uint32")
mydict = {"a": fff[:, 0], "b": fff[:, 1], "c": fff[:, 2], "d": fff[:, 3]}
dataset = tf.data.Dataset.from_tensor_slices((mydict["a"], mydict["b"], mydict["c"], mydict["d"]))

可以通过迭代嵌套张量来检查数据:

for i in dataset:
    print(i[0].numpy()) #prints the "a" entry

相关问题 更多 >