numpy.genfromtxt#
- numpy.genfromtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, skip_header=0, skip_footer=0, converters=None, missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=" !#$%&'()*+, -./:;<=>?@[\\]^{|}~", replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None, encoding=None, *, ndmin=0, like=None)[source]#
從文字檔案載入資料,並依指定方式處理遺失值。
從超過前 skip_header 行的每一行,會以 delimiter 字元分割,並且捨棄 comments 字元後的所有字元。
- 參數:
- fname檔案、字串、pathlib.Path、字串列表、生成器
要讀取的檔案、檔名、列表或生成器。如果檔名副檔名為
.gz
或.bz2
,則會先解壓縮檔案。請注意,生成器必須傳回位元組或字串。列表中的字串或由生成器產生的字串會被視為行。- dtypedtype,選用
結果陣列的資料型別。如果為 None,則資料型別將由每個欄位的內容個別決定。
- comments字串,選用
用來指示註解開始的字元。在一行中,註解後出現的所有字元都會被捨棄。
- delimiter字串、整數或序列,選用
用來分隔值的字串。預設情況下,任何連續的空白字元都充當分隔符號。也可以提供整數或整數序列作為每個欄位的寬度。
- skiprows整數,選用
skiprows 已在 numpy 1.10 中移除。請改用 skip_header。
- skip_header整數,選用
在檔案開頭要跳過的行數。
- skip_footer整數,選用
在檔案結尾要跳過的行數。
- converters變數,選用
將欄位資料轉換為值的函數集合。轉換器也可以用來為遺失資料提供預設值:
converters = {3: lambda s: float(s or 0)}
。- missing變數,選用
missing 已在 numpy 1.10 中移除。請改用 missing_values。
- missing_values變數,選用
對應於遺失資料的字串集合。
- filling_values變數,選用
當資料遺失時,要用作預設值的集合。
- usecols序列,選用
要讀取的欄位,從 0 開始為第一個欄位。例如,
usecols = (1, 4, 5)
將會提取第 2、第 5 和第 6 欄。- names{None, True, 字串, 序列},選用
如果 names 為 True,則欄位名稱會從前 skip_header 行之後的第一行讀取。此行可以選擇性地以註解分隔符號開頭。註解分隔符號之前的任何內容都會被捨棄。如果 names 是序列或逗號分隔名稱的單一字串,則這些名稱將用於在結構化 dtype 中定義欄位名稱。如果 names 為 None,則將使用 dtype 欄位的名稱(如果有的話)。
- excludelist序列,選用
要排除的名稱列表。此列表會附加到預設列表 [‘return’,’file’,’print’]。排除的名稱會附加底線:例如,file 會變成 file_。
- deletechars字串,選用
組合了無效字元的字串,這些字元必須從名稱中刪除。
- defaultfmt字串,選用
用來定義預設欄位名稱的格式,例如 “f%i” 或 “f_%02i”
- autostrip布林值,選用
是否自動從變數中去除空白字元。
- replace_space字元,選用
用於替換變數名稱中空白字元的字元。預設情況下,使用 ‘_’。
- case_sensitive{True, False, ‘upper’, ‘lower’},選用
如果為 True,欄位名稱區分大小寫。如果為 False 或 ‘upper’,欄位名稱會轉換為大寫。如果為 ‘lower’,欄位名稱會轉換為小寫。
- unpack布林值,選用
如果為 True,則傳回的陣列會被轉置,以便可以使用
x, y, z = genfromtxt(...)
解封裝引數。當與結構化資料型別一起使用時,會為每個欄位傳回陣列。預設值為 False。- usemask布林值,選用
如果為 True,則傳回遮罩陣列。如果為 False,則傳回一般陣列。
- loose布林值,選用
如果為 True,則對於無效值不會引發錯誤。
- invalid_raise布林值,選用
如果為 True,則當偵測到欄位數量不一致時,會引發例外。如果為 False,則會發出警告並跳過有問題的行。
- max_rows整數,選用
要讀取的最大行數。不得與 skip_footer 同時使用。如果給定,則值必須至少為 1。預設為讀取整個檔案。
- encoding字串,選用
用於解碼輸入檔案的編碼。當 fname 是檔案物件時不適用。特殊值 ‘bytes’ 啟用向後相容性解決方案,以確保您在可能的情況下收到位元組陣列,並將 latin1 編碼的字串傳遞給轉換器。覆寫此值以接收 unicode 陣列並將字串作為輸入傳遞給轉換器。如果設定為 None,則使用系統預設值。預設值為 ‘bytes’。
在 2.0 版本變更:在 NumPy 2 之前,為了與 Python 2 相容,預設值為
'bytes'
。現在預設值為None
。- ndmin整數,選用
與
loadtxt
相同的參數在 1.23.0 版本新增。
- like類陣列,選用
參考物件,允許建立非 NumPy 陣列的陣列。如果作為
like
傳入的類陣列支援__array_function__
協定,則結果將由其定義。在這種情況下,它確保建立與透過此引數傳入的物件相容的陣列物件。在 1.20.0 版本新增。
- 傳回值:
- outndarray
從文字檔案讀取的資料。如果 usemask 為 True,則這會是遮罩陣列。
另請參閱
numpy.loadtxt
當沒有遺失資料時的等效函數。
註解
當空格用作分隔符號,或當沒有給定分隔符號作為輸入時,兩個欄位之間不應有任何遺失資料。
當變數被命名時(透過彈性的 dtype 或使用 names 序列),檔案中不得有任何標頭(否則會引發 ValueError 例外)。
預設情況下,不會去除個別值中的空格。當使用自訂轉換器時,請確保函數確實會移除空格。
由於 dtype 探索,自訂轉換器可能會收到非預期的值。
參考資料
[1]NumPy 使用者指南,章節 NumPy 的 I/O。
範例
>>> from io import StringIO >>> import numpy as np
具有混合 dtype 的逗號分隔檔案
>>> s = StringIO("1,1.3,abcde") >>> data = np.genfromtxt(s, dtype=[('myint','i8'),('myfloat','f8'), ... ('mystring','S5')], delimiter=",") >>> data array((1, 1.3, b'abcde'), dtype=[('myint', '<i8'), ('myfloat', '<f8'), ('mystring', 'S5')])
使用 dtype = None
>>> _ = s.seek(0) # needed for StringIO example only >>> data = np.genfromtxt(s, dtype=None, ... names = ['myint','myfloat','mystring'], delimiter=",") >>> data array((1, 1.3, 'abcde'), dtype=[('myint', '<i8'), ('myfloat', '<f8'), ('mystring', '<U5')])
指定 dtype 和名稱
>>> _ = s.seek(0) >>> data = np.genfromtxt(s, dtype="i8,f8,S5", ... names=['myint','myfloat','mystring'], delimiter=",") >>> data array((1, 1.3, b'abcde'), dtype=[('myint', '<i8'), ('myfloat', '<f8'), ('mystring', 'S5')])
固定寬度欄位的範例
>>> s = StringIO("11.3abcde") >>> data = np.genfromtxt(s, dtype=None, names=['intvar','fltvar','strvar'], ... delimiter=[1,3,5]) >>> data array((1, 1.3, 'abcde'), dtype=[('intvar', '<i8'), ('fltvar', '<f8'), ('strvar', '<U5')])
顯示註解的範例
>>> f = StringIO(''' ... text,# of chars ... hello world,11 ... numpy,5''') >>> np.genfromtxt(f, dtype='S12,S12', delimiter=',') array([(b'text', b''), (b'hello world', b'11'), (b'numpy', b'5')], dtype=[('f0', 'S12'), ('f1', 'S12')])