如何在张量流中读取csv?

时间:2018-10-18 04:54:52

标签: python csv tensorflow input

我只是开始使用张量流。我正在尝试在张量流中读取csv文件。这是我在网上找到的示例:

filename_queue = tf.train.string_input_producer(["d:/Feng/LP/tensorflowtrydata.csv"])
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
record_defaults = [[1.0], [1.0], [1.0], [1.0], ["Null"]] 
col1, col2, col3, col4, col5 = tf.decode_csv(value,record_defaults=record_defaults) 
features = tf.stack([col1, col2, col3, col4])
with tf.Session() as sess:
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)
    for i in range(200):
        example, label = sess.run([features, col5])
        print (example,col5)
    coord.request_stop()
    coord.join(threads)

但是我有错误:

InvalidArgumentError (see above for traceback): Field 0 in record 0 is not a valid float: Sepal.Length
 [[Node: DecodeCSV_5 = DecodeCSV[OUT_TYPE=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_STRING], field_delim=",", na_value="", use_quote_delim=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](ReaderReadV2_3:1, DecodeCSV_5/record_defaults_0, DecodeCSV_5/record_defaults_0, DecodeCSV_5/record_defaults_0, DecodeCSV_5/record_defaults_0, DecodeCSV_5/record_defaults_4)]]

数据是虹膜数据集。看起来像:

iris.head()
   Sepal.Length  Sepal.Width  Petal.Length  Petal.Width Species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa
iris.dtypes
Sepal.Length    float64
Sepal.Width     float64
Petal.Length    float64
Petal.Width     float64
Species          object

您可以看到错误信息表明它不是有效的浮点数。但是所有数据都是float64。

我真的是张量流的新手。我什至不知道从哪里开始尝试。所以,有人可以在这里帮助我吗? dtype:对象

1 个答案:

答案 0 :(得分:2)

混乱之处在于iris.head()提供了df AFTER 标头的前5行已处理。而在tensorflow中,您可以在错误行中看到: Field 0 in record 0 is not a valid float: Sepal.Length不会自动处理标头,因此字符串 Sepal.Length 会引起问题。

您可以使用pandas.read_csv首先导入文件,然后将其转换为张量流所需的内容,或者使用类似以下的选项:

reader = tf.TextLineReader(skip_header_line=1)