# Numpy #7 陣列結構
## NP 資料型別

指定各欄位的資料型別
變數dt = np.dtype('N0, N1, N2, ...')
N0 N1...各自代表這些欄位的型別
可以用上表的字母部分顯示
例如f8代表8bytes float(float64);U5代表長度5以下的unicode
也可以用上表的NP通用型別
例如np.int32
讀取文檔的時候,上面變數dt就可以用參數dtype=dt指定
例如 a = np.genfromtxt('test.txt', delimiter=',', dtype=dt)
## 結構化陣列
可用指定dic的方式
舉例:
原始資料 test.txt
Jay,1,2,Yes,87%
James,3,4,No,3%
Joe,5,6,Yes,55%
dt = np.dtype({'names':('Name', 'num1', 'num2', 'True'), 'formats':((np.str_, 5), np.int32, int, 'U3')})
前半代表欄位名稱,後半則分別指定類別(上表都可混用)
整理資料可輸入
b = np.genfromtxt("test.txt", delimiter=',', dtype=dt)
可用索引提取資料,例如
b[0]代表第一列資料
b['name']則提取該欄位名稱的資料
或是b[0]['name']得到某列某欄位的資料
也可以加入邏輯運算,例如
b[b['num2'] >= 3]['Name']
欄位名 >=3的欄 輸出的欄位名
## 清單餵入結構化陣列
建立3X3 zero矩陣,利用上面dt的dtype
c = np.zeros(3, dtype=dt)
結果
array([('', 0, 0, ''), ('', 0, 0, ''), ('', 0, 0, '')],
dtype=[('Name', '<U5'), ('num1', '<i4'), ('num2', '<i8'), ('True', '<U3')])
清單
name = ['Chloe', 'Charlotte', 'Clara']
num_1 = [11, 12, 13]
num_2 = [14, 15, 16]
check = ['Y', 'Y', 'N']
各自清單置入原來的欄位裡面
c['Name'] = name
c['num1'] = num_1
c['num2'] = num_2
c['True'] = check
結果
[('Chloe', 11, 14, 'Y') ('Charl', 12, 15, 'Y') ('Clara', 13, 16, 'N')]
更多可以參考:
https://numpy.org/doc/stable/user/basics.rec.html
###### tags: `資料分析` `numpy` `python`