Numpy資料存取
阿新 • • 發佈:2018-12-17
Numpy資料存取 numpy提供了便捷的內部檔案存取,將資料存為np專用的npy(二進位制格式)或npz(壓縮打包格式)格式 npy格式以二進位制儲存資料的,在二進位制檔案第一行以文字形式儲存了資料的元資訊(維度,資料型別),可以用二進位制工具檢視檢視內容 npz檔案以壓縮打包檔案儲存,可以用壓縮軟體解壓 import numpy as np a = np.array([['張三','李四','王五','趙六'],['11','12','13','14','15']]) b = a = np.arange(24).reshape((2,3,4)) np.save('x.npy',a) #存為.npy檔案 np.savez("y.npz", ar0 = a, ar1 = b) # 多個數組存入一個.npz壓縮包 c = np.load('x.npy') # .npy檔案讀入陣列 c d = np.load("y.npz") # .npz壓縮包讀入 d["ar0"] # 單獨輸出陣列
CSV檔案存取
Comma-Separated Value,逗號分隔值檔案
一種資料儲存格式
- 廣泛支援
- 類表格
- 儲存一維或二維資料
- 文字格式
CSV檔案:
- 顯示:表格狀態
- 原始檔:換行和逗號分隔行列的格式化文字
Numpy儲存CSV檔案
將ndarray陣列寫入CSV檔案中
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
- frame 儲存檔案、字串或產生器的名字,可以是.gz或.bz2的壓縮檔案,對大型資料有用,壓縮後儲存或讀取,節省儲存資源
- array 存入檔案的陣列
- fmt 寫入檔案中每個元素的字串格式,例如
- %s (ASCII字元)
- %d (整數)
- %.2f(2位小數的浮點數)
- %.18e(科學計數法,常用)
- np各型別元素儲存到CSV中都是字串,字串顯示的格式,預設%.18e,科學計數法,保留18位小數的浮點數形式儲存資料,需要根據情況修改
- delimiter 分隔字串,預設是任何空格,需要改為 逗號
np的savetxt函式並不是專為生成csv檔案用的,它可以生成任何帶特定分隔字元的文字檔案,但csv檔案使用廣泛,所以我們一般用此函式只生成csv
import numpy as np a = np.arange(100).reshape(5,20) np.savetxt('a.csv',a,fmt='%d',delimiter=',') #整數 np.savetxt('a.csv',a,fmt='%.1f',delimiter=',') #一位小數的浮點數 b = np.array([['a','b','c','d'],['11','12','13','14']]) np.savetxt('b.csv',b,fmt='%s',delimiter=',') #ASCII字元,不能儲存非ASCII字串
csv檔案只能儲存一維、二維資料,不能儲存多維資料
import numpy as np a = np.arange(24).reshape((2,12)) # a = np.arange(24).reshape((2,3,4)) # 儲存多維資料出錯 a np.savetxt('y.csv',a,fmt='%d',delimiter=',')
Numpy讀取CSV檔案
將CSV檔案資料讀入ndarray陣列
np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
- frame 檔案、字串或產生器,可以是.gz或bz2壓縮檔案
- dtype 資料型別,可選,csv的字串以什麼資料型別讀入陣列中,預設np.float 浮點數
- delimiter 分隔字串,預設是任何空格,改為 逗號
- skiprows 跳過前x行,一般跳過第一行表頭
- usecols 讀取指定的列,索引,元組型別
- unpack 如果True,讀入屬性將分別寫入不同陣列變數,False 讀入資料只寫入一個數組變數,預設False
import numpy as np b = np.loadtxt('a.csv', delimiter=',') # 預設浮點型 b = np.loadtxt('a.csv', dtype=np.int, delimiter=',') #資料為整型 #b = np.loadtxt('a.txt', dtype=np.str, delimiter=',') #資料為字串,輸出預設帶 b,要去掉用下面方式輸出: b = np.loadtxt('a.txt', dtype=bytes, delimiter=',').astype(str) b = np.loadtxt('a.txt', dtype=bytes, delimiter=',',skiprows=1,usecols=(2,3)).astype(str) #跳過第一行,讀入第3、4列 b