1. 程式人生 > >CSV檔案的讀取,TensorFlow和pandas

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