1. 程式人生 > >Numpy資料存取

Numpy資料存取

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