CSV文件的读取,TensorFlow和pandas

csv文件的读取,有两种方法:调用pandas库函数或者直接用TensorFlow读取,

1、调用pandas

data.csv是自己随便搞的一个数据文件,数据样例和读取代码如下:

import tensorflow as tf
import pandas as pd

def pd_read_csv():
 
    data_frame = pd.read_csv("data.csv", sep=",")
    data1 = []
    data2 = []
    data3 = []
    data4 = []
   
    for index in data_frame.index:
        data_row = data_frame.loc[index]
        data1.append(data_row["one"])
        data2.append(data_row["two"])
        data3.append(data_row["three"])
        data4.append(data_row["label"])
    return (data1,data2,data3,data4)

data1, data2, data3, data4 = pd_read_csv()

数据的第一行都是有特征的,比如one、two.......,当然也可以是纯数字,只需要修改如下:

#部分代码修改
data_frame =  pd.read_csv("data.csv", header=None)
dataset = data_frame.values
data_x = dataset[:, 0:3].astype(float)#前三列为data1-data3
label = dataset[:, 3] #第四列为data4或者label

得到的结果为:


2、使用TensorFlow方法

TensorFlow读取csv文件相比较pandas要复杂,还是使用上面的数据文件,只不过把第一行的特征删掉,data1是data的副本,TensorFlow这个读取方法可以一次读取多个文件。过程如下:

  1. 产生文件名列表,可以一次读取多个csv文件;
  2. 读取原始数据;
  3. 解析读出的原始数据,转化成数值数据或指定格式的数据;
  4. 开启多线程协调器,启动输入管道;
  5. 读取结束。
import tensorflow as tf

filename_queue = tf.train.string_input_producer(["data.csv", "data1.csv"])

reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
# key返回的是读取文件和行数信息;value是按行读取到的原始字符串,送到decoder解析

record_defaults = [[1.0], [1.0], [1.0], ["Null"]] 
# 这里的数据类型和文件数据类型一致,必须是list形式
col1, col2, col3, col4 = tf.decode_csv(value, record_defaults=record_defaults)

features = tf.stack([col1, col2, col3])

with tf.Session() as sess:
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)

    for i in range(600):
        example, label = sess.run([features, col4])
        print (example,col4)

    coord.request_stop()
    coord.join(threads)

结果如下:

这里有几个点需要注意,代码注释中也已经写明。

  1. 文件名列表可以自己生成,也可以手写。
  2. key是文件信息和当前读取的行数,value是原始字符串。
  3. defualt有两个作用,一个是指定当前列的数据类型,一个是替补空值。
  4. 按行读取后读出的每个值都是rank为0的标量。
  5. stack函数可以堆叠,组成一个新的tensor,默认axis=0,因此就会横向把前面的标量串成一个rank为1的tensor。

参考:

[1] https://blog.csdn.net/freedom098/article/details/56006130 

猜你喜欢

转载自blog.csdn.net/qq_27871973/article/details/82872290
今日推荐