本文主要講解下Python載入csv檔案的兩種方式,如果知道如何處理的就不必往下看了。
下面來簡單介紹下。
執行個體中的資料集是kaggle的Digit Recognizer的train.csv檔案,資料格式很特別也很普遍,截圖如下:
csv檔案中每行資料的每個特徵列都是用逗號“,”隔開。CSV檔案中除了儲存數值外,還有一些屬性值,如第一行以及第一列的label標籤。所以在處理是需要進行相應的處理。
下面介紹下兩種載入這種csv檔案的方法 方法一:使用Python的csv模組
csv模組中的函數
reader(csvfile, dialect='excel', **fmtparams)
參數說明:
csvfile,必須是支援迭代(Iterator)的對象,可以是檔案(file)對象或者列表(list)對象,如果是檔案對
象,開啟時需要加”b”標誌參數。
dialect,編碼風格,預設為excel的風格,也就是用逗號(,)分隔,dialect方式也支援自訂,通過調用register_dialect方法來註冊,下文會提到。
fmtparam,格式化參數,用來覆蓋之前dialect對象指定的編碼風格。
負載檔案代碼:
import csv def loadCSVfile1(): list_file = [] with open('train.csv','rb') as csv_file: all_lines=cvs.reader(csv_file) for one_line in all_lines: list_file.append(one_line) list_file.remove(list_file[0]) arr_file = array(list_file) label = arr_file[:, 0] data = arr_file[:, 1:] return data, label
載入csv核心部分還是
其中,‘rb’中的r表示“讀”模式,因為是檔案對象,所以加‘b’。open()返回了一個檔案對象
myFile,reader(myFile)只傳入了第一個參數,另外兩個參數採用預設值,即以excel風格讀入。reader()返回一個
reader對象all_lines,all_lines是一個list,當調用它的方法lines.next()時,會返回一個string。上面程式的效果是將csv
檔案中的文本按行列印,每一行的元素都是以逗號分隔字元’,’分隔得來。 方法一:使用Python的numpy庫
有了numpy,Python對於資料的處理可以說是如虎添翼,速度也大大提升。使用numpy首先要在前面載入numpy庫,代碼如下:
import numpy as np
對於上面的csv檔案,下面程式用來讀取資料部分:
def loadCSVfile2(): tmp = np.loadtxt("train.csv", dtype=np.str, delimiter=",") data = tmp[1:,1:].astype(np.float)#載入資料部分 label = tmp[1:,0].astype(np.float)#載入類別標籤部分 return data, label #返回array類型的資料
三行代碼,很簡便。最後的結果是array類型,type為float64
代碼很簡單,僅供參考。