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')])