將CSV記錄轉換爲tensor。 每列映射到一tensor。
語法:
tf.io.decode_csv(
records, record_defaults, field_delim=',', use_quote_delim=True, na_value='',
select_cols=None, name=None
)
常用參數:
records
: string類型的tensor, 每個字符串都是csv中的一個記錄/行,所有記錄都應該具有相同的格式。
record_defaults
:具有特定類型的Tensor對象列表。可接受的類型是float32,float64,int32,int64,string。
field_delim
: 一個可選的字符串,默認爲“,”,分隔記錄中字段的字符分隔符。
返回:
tensor對象的列表。 具有與record_defaults相同的類型。 每個tensor將具有與記錄相同的shape。
異常:
ValueError
: 如果任何參數格式不正確。
示例:
作用是解析csv文件,接下來舉例說明如何使用decode_csv來把一個由“,”分隔的csv字符串解析成各個值的。
1、
sample_str = '1,2,3,4,5'
record_defaults = [tf.constant(0, dtype=tf.int32)] * 5
parsed_fields = tf.io.decode_csv(sample_str, record_defaults)
print(parsed_fields)
[<tf.Tensor: id=24, shape=(), dtype=int32, numpy=1>, <tf.Tensor: id=25, shape=(), dtype=int32, numpy=2>, <tf.Tensor: id=26, shape=(), dtype=int32, numpy=3>, <tf.Tensor: id=27, shape=(), dtype=int32, numpy=4>, <tf.Tensor: id=28, shape=(), dtype=int32, numpy=5>]
2、
sample_str = '1,2,3,4,5'
record_defaults = [
tf.constant(0, dtype=tf.int32),
0,
np.nan,
"hello",
tf.constant([])
]
parsed_fields = tf.io.decode_csv(sample_str, record_defaults)
print(parsed_fields)
[<tf.Tensor: id=35, shape=(), dtype=int32, numpy=1>, <tf.Tensor: id=36, shape=(), dtype=int32, numpy=2>, <tf.Tensor: id=37, shape=(), dtype=float32, numpy=3.0>, <tf.Tensor: id=38, shape=(), dtype=string, numpy=b'4'>, <tf.Tensor: id=39, shape=(), dtype=float32, numpy=5.0>]
3、給空值
record_defaults = [
tf.constant(0, dtype=tf.int32),
0,
np.nan,
"hello",
tf.constant([])
]
try:
parsed_fields = tf.io.decode_csv(',,,,', record_defaults)
except tf.errors.InvalidArgumentError as ex:
print(ex)
Field 4 is required but missing in record 0! [Op:DecodeCSV]
4、給出相對於record_defaults更多的fields
record_defaults = [
tf.constant(0, dtype=tf.int32),
0,
np.nan,
"hello",
tf.constant([])
]
try:
parsed_fields = tf.io.decode_csv('1,2,3,4,5,6,7', record_defaults)
except tf.errors.InvalidArgumentError as ex:
print(ex)
Expect 5 fields but have 7 in record 0 [Op:DecodeCSV]