genfromtxt函式
- genfromtxt函式建立陣列**資料
- genfromtxt主要執行兩個迴圈運算。第乙個迴圈將檔案的每一行轉換成字串序列。第二個迴圈將每個字串序列轉換為相應的資料型別。
- genfromtxt能夠考慮缺失的資料,但其他更快和更簡單的函式像loadtxt不能考慮缺失值。
- 使用前需匯入相應模組
>>> import numpy as np
>>> from stringio import stringio
- 定義輸入
- 將行分割成列
- genfromtxt分割每個非空行成乙個字串序列。空的行或注釋行跳過。
- 分割符並不侷限於單個字元,任何字串就可以了。
- 分割乙個固定寬度的檔案,列的寬度被定義為乙個給定的字元數。在這種情況下,我們需要將分隔符設定成乙個整數(如果所有的列有相同的大小)或乙個整數序列(如果列可以有不同的大小)。
>>> data = "123456789\n 4 7 9\n 4567 9"
>>> np.genfromtxt(stringio(data), delimiter=(4, 3, 2))
array([[ 1234., 567., 89.], [ 4., 7., 9.], [ 4., 567., 9.]])
- autostrip引數
當把一行分割成乙個字串序列,序列中的每一項前後的多餘空格還存在,可以將autostrip引數設定為true,去掉空格。
- comments引數
comments引數是乙個字串,標誌著乙個注釋的開始符號。預設是"#",在轉換過程中注釋標記可能發生在任何地方。任何字元出現在在注釋標記之後會被忽略。
注意:這種行為有乙個例外:如果可選的引數names= true,第一行檢查到注釋行會被認為是名稱。
- skip_header和skip_footer引數
乙個檔案的頁首會阻礙檔案的處理。在這種情況下,我們需要使用skip_header可選引數。這個引數的值必須是乙個整數,跳過檔案開頭的對應的行數,然後再執行任何其他操作。同樣的,我們通過使用skip_footer屬性和n的值可以跳過檔案的最後n行。預設值都為0.
- usercols引數
在某些情況下,我們只對資料中的某些列感興趣。我們可以使用usecols選擇感興趣的列。這個引數接受乙個整數或乙個整數序列作為索引。記住,按照慣例,第一列的索引0,-1對應最後一列。如果列有名稱,我們也可以將usecols引數設定為他們的名稱,或者包含列名稱乙個字串序列或逗號分隔的字串。
-dtype引數
我們從檔案讀取的字串序列要轉換為其他型別資料時需設定dtype引數。預設是float型別。
- 單個型別,如dtype =float。
- 乙個序列型別,例如dtype=(int, float, float).
- 乙個逗號分隔的字串,例如dtype="i4,f8,|s3".
- 乙個字典包含兩個鍵『names』和『formats』
- 乙個元組序列,例如dtype = [('a',int),('b',float)]
- 乙個存在的numpy.dtype物件
- 乙個特殊的值none,在這種情況下,每個列的型別有自身資料決定。將引數設定成none效率較低。因為它會從布林值開始檢驗,然後是整型,浮點型,複數最後是字串,直到滿足條件為止。
- names引數
可以將names引數設定為true並跳過第一行,程式將把第一行作為列名稱,即使第一行被注釋掉了也會被讀取。或可以使用dtype設定名稱,也可以重寫names,預設的names是none,當names=none時,將有numpy產生一些標準預設的值"f%i",我們可以通過defaultfmt改變預設格式。
>>> data = stringio("1 2 3\n 4 5 6")
>>> ndtype=[('a',int), ('b', float), ('c', int)]
>>> names = ["a", "b", "c"]
>>> np.genfromtxt(data, names=names, dtype=ndtype)array([(1, 2.0, 3), (4, 5.0, 6)],
dtype=[('a', '
注意:我們需要記住,只有一些名字沒有定義時才會使用defaultfmt
- 驗證names
numpy陣列和乙個結構化dtype也可以視為recarray,乙個字段可以當成乙個屬性訪問。出於這個原因,我們可能需要確保欄位名稱不包含任何空格或無效的字元,或者不符合標準屬性的名稱(如size或shape)。genfromtxt接受三個可選引數,提供了乙個更好的控制上的名字:
- deletechars:乙個name中所有包含的需要刪除的連線符。預設情況下無效字元~!@#$%^&*()——+~=\|]}({;:/?>,<。
- excludelist:給出一系列要刪除的name,如return,file,print……如果其中乙個輸入的名字出現在這個列表中,將會給它附加乙個下劃線(「_」)。
- case_sensitive:名字是否應該區分大小寫(case_sensitive = true),轉換為大寫(case_sensitive=false or case_sensitive='upper')或轉換為小寫(case_sensitive='lower')
- converters引數
當我們希望日期的格式mm/dd/yyyy被轉換為乙個datetime物件,或乙個字串xx%正確地轉換為乙個浮點數在0和1之間時,需要使用converters引數定義轉換函式。
這個引數的值通常是乙個以列索引或列名稱作為鍵和乙個轉換函式作為值的字典。這些轉換函式可以是實際的函式或lambda函式。在任何情況下,他們應該只接受乙個字串作為輸入和輸出和只有乙個想要得到的元素型別。
- missing_values
預設情況下使用空格表示缺失,我們可以使用更複雜的字元表示缺失,例如'n/a'或'???'。missing_values接受三種型別的值:
- 乙個字串或逗號分隔的字串:這個字串將被用作標記的缺失資料的所有列
- 乙個字串序列:在這種情況下,按照順序每一項與對應的列相關聯。
- 乙個字典:字典的值是字串或字串序列。對應的key可以列索引(整數)或列名(字串)。此外,key=none定義乙個預設值的適用於所有列。
- filling_values引數
出現缺失值時,系統預設填充的值:
expected type default
bool false
int -1
float np.nan
complex np.nan+0j
string '???'
我們也可以像missing_values引數自定義設定引數的值。filling_values接受三種型別的值:
- 乙個單獨的值:所有列的預設值
- 乙個序列的值:按照順序每一項對應相應列。
- 乙個字典:字典的值是乙個單獨的物件。對應的key可以列索引(整數)或列名(字串)。此外,key=none定義乙個預設值的適用於所有列。
- usermask引數
我們可能還想跟蹤缺失資料的發生通過構造乙個boolean mask,資料缺失的地方返回true,否則,則返回false。要做到這一點,我們必須設定可選引數usemask=true(預設是false)。結果將輸出乙個maskedarray陣列。
除了genfromtxt,numpy.lib.io模組提供了一些來自genfromtxt的便捷功能。這些功能都是以相同的方式工作,但他們有不同的預設值。
- ndfromtxt
通常設定usemask=false.輸出通常是乙個標準的numpy.ndarray.
- mafromtxt
通常設定usemask=true. 輸出是maskedarray
- recfromtxt
返回標準的numpy.recarray (如果usemask=false)或乙個maskedrecords陣列(如果usemaske=true).預設的dtype是dtype=none,意味著每一列的型別將自動確定。
- recfromcsv
類似於recfromtxt, 但delimiter=",".
Numpy學習筆記(1)
numpy的部分功能 1.用於資料整理和清理 子集構造和過濾 轉換等快速的向量化陣列運算 2.常用的陣列演算法,如排序 唯一化 集合運算等 3.高效的描述統計和資料聚合 摘要運算 4.用於異構資料集的合併 連線運算的資料對齊和關係型資料運算 5.將條件邏輯表述為陣列表示式 6.資料的分組運算 聚合 ...
numpy 學習筆記(1)
一 陣列性質 1.下標 陣列下標從0開始 2.資料型別 資料型別為numpy自定義資料型別,如果定義陣列時沒有指定資料型別,程式會自行轉換,資料型別請參考資料型別 3.秩 rank 陣列的維數 4.軸 axes 相當於陣列的第幾維,秩說的是軸的數量 二陣列物件的屬性 ndim 陣列的秩,陣列的維數 ...
NumPy學習筆記(1) NumPy庫簡介
這兩年python特別火,在一些it 上轉一圈各處都能看到關於python的技術類文章,引用官方的說法 python就是 一種解釋型的 物件導向的 帶有動態語義的高階程式語言 等方面。我是因為搞深度學習開始接觸python的,之前學的c 在遇見python後簡直開啟了新世界的大門,碼 的幸福感簡直爆...