python使用TensorFlow讀取和批處理CSV文件
一、實驗?zāi)康?/h2>
本次實驗旨在使用 TensorFlow 庫讀取 CSV 文件,并將其數(shù)據(jù)以批次的形式進行處理和展示。通過該實驗,我們希望掌握 TensorFlow 中 tf.data.TextLineDataset 的使用方法,以及如何解析 CSV 數(shù)據(jù)并進行批量處理。
二、實驗環(huán)境
- 編程語言:Python
- 主要庫:TensorFlow、os
- 操作系統(tǒng):Windows
- 實驗數(shù)據(jù):位于 C:\Users\30597\Desktop\sye\people.csv 的 CSV 文件,包含 Name、Age 和 Occupation 三列數(shù)據(jù)。
三、實驗步驟
1. 導(dǎo)入必要的庫
import tensorflow as tf import os
導(dǎo)入 tensorflow 庫用于數(shù)據(jù)處理,os 庫用于文件路徑驗證。
2. 定義 CSV 讀取函數(shù)
def csv_reader(file_path, batch_size=2):
# 1. 創(chuàng)建Dataset并跳過表頭
dataset = tf.data.TextLineDataset(file_path).skip(1)
# 2. 定義CSV解析函數(shù)
def parse_line(line):
record_defaults = [
tf.constant(["Unknown"], tf.string), # Name列
tf.constant([0], tf.int32), # Age列
tf.constant(["Unknown"], tf.string) # Occupation列
]
fields = tf.io.decode_csv(line, record_defaults)
return fields
# 3. 應(yīng)用解析和批處理
dataset = dataset.map(parse_line)
dataset = dataset.batch(batch_size, drop_remainder=False)
return dataset
- 創(chuàng)建 Dataset 并跳過表頭:使用 tf.data.TextLineDataset 讀取 CSV 文件的每一行,并通過 skip(1) 跳過表頭。
- 定義 CSV 解析函數(shù):parse_line 函數(shù)使用 tf.io.decode_csv 解析每一行數(shù)據(jù),同時指定每列的默認值。
- 應(yīng)用解析和批處理:使用 map 方法將解析函數(shù)應(yīng)用到每個數(shù)據(jù)行,再使用 batch 方法將數(shù)據(jù)分成指定大小的批次。
3. 主程序邏輯
if __name__ == "__main__":
# 指定具體文件路徑
csv_path = r"C:\Users\30597\Desktop\sye\people.csv"
# 驗證文件存在性
if not os.path.exists(csv_path):
raise FileNotFoundError(f"CSV文件未找到:{csv_path}")
# 創(chuàng)建數(shù)據(jù)集
dataset = csv_reader(csv_path, batch_size=2)
# 迭代數(shù)據(jù)批次
for batch_num, (names, ages, occupations) in enumerate(dataset):
print(f"\n批次 {batch_num + 1}:")
# 將字節(jié)字符串解碼為普通字符串
names_str = [name.decode('utf-8') for name in names.numpy()]
occupations_str = [occ.decode('utf-8') for occ in occupations.numpy()]
print("姓名:", names_str)
print("年齡:", ages.numpy().tolist())
print("職業(yè):", occupations_str)
- 指定文件路徑并驗證存在性:使用 os.path.exists 函數(shù)檢查 CSV 文件是否存在,若不存在則拋出 FileNotFoundError 異常。
- 創(chuàng)建數(shù)據(jù)集:調(diào)用 csv_reader 函數(shù)創(chuàng)建數(shù)據(jù)集。
- 迭代數(shù)據(jù)批次:遍歷數(shù)據(jù)集的每個批次,將字節(jié)字符串解碼為普通字符串,并打印每個批次的姓名、年齡和職業(yè)信息。
四、實驗結(jié)果
實驗成功讀取了指定的 CSV 文件,并將數(shù)據(jù)按批次處理和展示。每個批次包含兩條記錄,分別顯示了姓名、年齡和職業(yè)信息。若 CSV 文件中存在缺失值,將使用默認值進行填充。
五、實驗總結(jié)與反思
優(yōu)點
- 使用 TensorFlow 的 tf.data 模塊:該模塊提供了高效的數(shù)據(jù)處理和迭代功能,能夠方便地處理大規(guī)模數(shù)據(jù)集。
- 數(shù)據(jù)解析和批處理:通過定義解析函數(shù)和使用 map、batch 方法,實現(xiàn)了數(shù)據(jù)的自動解析和批量處理,提高了代碼的可讀性和可維護性。
- 文件路徑驗證:在讀取文件前進行路徑驗證,避免了因文件不存在而導(dǎo)致的運行時錯誤。
不足與改進方向
- 錯誤處理:當(dāng)前代碼僅處理了文件不存在的情況,對于 CSV 文件格式錯誤、數(shù)據(jù)類型不匹配等異常情況未進行處理??梢蕴砑痈嗟漠惓L幚磉壿嫞岣叽a的健壯性。
- 代碼可擴展性:代碼中硬編碼了 CSV 文件的列數(shù)和默認值,若 CSV 文件的結(jié)構(gòu)發(fā)生變化,需要手動修改代碼??梢钥紤]將列信息和默認值作為參數(shù)傳遞給 csv_reader 函數(shù),提高代碼的可擴展性。
- 性能優(yōu)化:對于大規(guī)模數(shù)據(jù)集,當(dāng)前的批處理方式可能會導(dǎo)致內(nèi)存占用過高。可以考慮使用 prefetch 方法進行數(shù)據(jù)預(yù)取,提高數(shù)據(jù)處理的性能。
總體而言,本實驗通過使用 TensorFlow 成功實現(xiàn)了 CSV 文件的讀取和批處理,為后續(xù)的數(shù)據(jù)處理和分析奠定了基礎(chǔ)。
以上就是python使用TensorFlow讀取和批處理CSV文件的詳細內(nèi)容,更多關(guān)于python TensorFlow讀取CSV的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用gluon/mxnet模塊實現(xiàn)的mnist手寫數(shù)字識別功能完整示例
這篇文章主要介紹了Python使用gluon/mxnet模塊實現(xiàn)的mnist手寫數(shù)字識別功能,結(jié)合完整實例形式分析了Python調(diào)用gluon/mxnet模塊識別手寫字的具體實現(xiàn)技巧,需要的朋友可以參考下2019-12-12
python在TXT文件中按照某一字符串取出該字符串所在的行方法
今天小編就為大家分享一篇python在TXT文件中按照某一字符串取出該字符串所在的行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
python中readline判斷文件讀取結(jié)束的方法
這篇文章主要介紹了python中readline判斷文件讀取結(jié)束的方法,實例形式詳細分析了Python中readline的用法,需要的朋友可以參考下2014-11-11

