2017-03-10 14 views
0

データが不足していることを示すNA値を持つ整数値を持つ.csvファイルがあります。decode_csv()で.csvファイルからNaN値を読み取る

サンプルファイル:

-9882,-9585,-9179 
-9883,-9587,NA 
-9882,-9585,-9179 

import tensorflow as tf 

reader = tf.TextLineReader(skip_header_lines=1) 
key, value = reader.read_up_to(filename_queue, 1) 
record_defaults = [[0], [0], [0]] 
data, ABL_E, ABL_N = tf.decode_csv(value, record_defaults=record_defaults) 

でそれを読み取ろうとそれは第二の繰り返し

InvalidArgumentError (see above for traceback): Field 5 in record 32400 is not a valid int32: NA 

に後でsess.run(_)に次のエラーをスローする方法はありますTensorFlowでNaNまたは同様の値としてcsvを読み込んでいる間に文字列 "NA"を解釈しますか?

答えて

0

最近同じ問題が発生しました。私は読書のcsvが私のために遅すぎるのでtfrecordsへの切り替えを予定し、その後

# Set up reading from CSV files 
    filename_queue = tf.train.string_input_producer([filename]) 
    reader = tf.TextLineReader() 
    key, value = reader.read(filename_queue) 
    NUM_COLUMNS = XX # Specify number of expected columns 

    # Read values as string, set "NA" for missing values. 
    record_defaults = [[tf.cast("NA", tf.string)]] * NUM_COLUMNS 
    decoded = tf.decode_csv(value, record_defaults=record_defaults, field_delim="\t") 
    # Replace every occurrence of "NA" with "-1" 
    no_nan = tf.where(tf.equal(decoded, "NA"), ["-1"]*NUM_COLUMNS, decoded) 
    # Convert to float, combine to a single tensor with stack. 
    float_row = tf.stack(tf.string_to_number(no_nan, tf.float32)) 

しかし、長期的に浮いているように、それを変換し、いくつかの有効な値で「NA」のすべての発生を置き換える、文字列としてCSVを読み込むことで、それを解決しましたニーズ

関連する問題