Numpy 的 genfromtext(~)
方法讀取文本文件,並將其內容解析為 Numpy 數組。與 Numpy 的 loadtxt(~)
方法不同,genfromtxt(~)
適用於缺失的數字。
參數
1. fname
| string
文件的名稱。如果該文件與腳本不在同一目錄中,請確保也包含該文件的路徑。
2. dtype
| string
或 type
或 list<string>
或 list<type>
| optional
所構造數組所需的數據類型。默認情況下,dtype=float64
。這意味著所有整數也將轉換為浮點數。
如果您設置 dtype=None
,那麽 Numpy 將嘗試從您的值推斷類型。這可能比您自己設置類型要慢得多。
3. comments
| string
| optional
如果您的輸入文件包含注釋,那麽您可以指定標識注釋的內容。默認情況下, comments="#"
,即同一行中 # 後麵的字符將被視為注釋。如果您的文本文件不包含任何注釋,您可以設置None
。
4. delimiter
| string
| optional
用於分隔數據的字符串。默認情況下,分隔符是空格。
5. skiprows
| int
| optional
在 Numpy 1.10 版本中,該參數已被 skip_header
取代。
6. skip_header
| int
| optional
開頭要跳過的行數。請注意,這包括評論。默認情況下,skiprows=0
。
7. skip_footer
| int
| optional
最後要跳過的行數。請注意,這包括評論。默認情況下,skiprows=0
。
8. converters
| dict<int,function>
| optional
您可以應用映射來轉換列值。鍵是列的整數索引,值是所需的映射。檢查下麵的示例以進行說明。默認情況下,dict=None
。
9. missing
| string
| optional
在 Numpy 1.10 版本中,該參數已被 missing_values
取代。
10.missing_values
| string
或 sequence<string>
| optional
將被視為缺失值的字符串序列。這僅在 usemask=True
時相關。請參閱示例以進行澄清。
11.filling_values
| value
或 dict
或 sequence<value>
| optional
如果傳遞單個值,則所有缺失值和無效值都將被該值替換。通過傳遞一個字典,您可以為不同的列指定不同的填充值。鍵是列整數索引,值是該列的填充值。
12.usecols
| int
或 sequence
| optional
您要讀取的列的整數索引。默認情況下, usecols=None
,即讀取所有列。
13.names
| None
或 True
或 string
或 sequence<string>
| optional
結果數組的字段名稱。此參數僅與那些希望創建結構化數組的人相關。
類型 |
說明 |
---|---|
None |
將返回標準數組而不是結構化數組。 |
True |
指定的 skip_header 行之後的第一行將被視為字段名稱。 |
string |
包含以逗號分隔的字段名稱的單個字符串。 |
sequence |
包含字段名稱的類似數組的結構。 |
默認情況下,names=None
。
附帶說明一下,結構化數組並不常用,因為 Pandas 庫中的 Series 和 DataFrames 是更好的選擇。
14.excludelist
| sequence
| optional
傳遞的字符串將附加到默認列表 ["return", "file", "print"] 中。請注意,下劃線將附加到傳遞的字符串中(例如,如果傳遞"abc",則"abc_"將附加到默認列表中)。這僅與那些希望創建結構化數組的人相關。
15.deletechars
| string
長度為 1 或 sequence
或 dict
| optional
要從名稱中刪除的字符。
16.defaultfmt
| string
| optional
結果字段名稱的格式。語法遵循 Python 標準字符串格式化程序的語法:
17.autostrip
| boolean
| optional
是否刪除值中的前導和尾隨。這僅適用於字符串值。默認情況下,autostrip=False
。
18.replace_space
| string
| optional
用於替換字段名稱中的空格的字符串。請注意,前導和尾隨空格將被刪除。默認情況下,replace_space="_"
。
19.case_sensitive
| string
或 boolean
| optional
如何處理字符串字符的大小寫。
值 |
說明 |
---|---|
True |
保持 shell 原樣。 |
False |
將值轉換為大寫。 |
"upper" |
將值轉換為大寫。 |
"lower" |
將值轉換為小寫。 |
默認情況下,case_sensitive=True
。
20.unpack
| boolean
| optional
您可以通過將其設置為 True
來單獨檢索列數組,而不是使用一個巨大的 Numpy 數組。例如,col_one, col_two = np.genfromtxt(~, unpack=True)
。默認情況下,unpack=False
。
21.usemask
| boolean
| optional
是否返回掩碼布爾數組。默認情況下,usemark=True
。
22.loose
| boolean
| optional
如果為 True,則無效值將轉換為 nan
並且不會引發錯誤。默認情況下,loose=True
。
23.invalid_raise
| boolean
| optional
如果行中的值數與列數不匹配,則會引發錯誤。如果設置為 False,則將從結果數組中省略無效行。默認情況下,invalid_raise=True
。
24.max_rows
| int
| optional
要讀取的最大行數。默認情況下,讀取所有行。
25.encoding
| string
| optional
讀取文件時使用的編碼(例如"latin-1"、"iso-8859-1")。默認編碼="bytes"。
返回值
包含導入數據的 Numpy 數組。
例子
基本用法
假設我們有以下名為 my_data.txt
的 text-file :
1 2 3 4
5 6 7 8
要導入此文件:
a = np.genfromtxt("my_data.txt")
a
array([[1., 2., 3., 4.],
[5., 6., 7., 8.]])
請注意,此 Python 腳本與 my_data.txt
位於同一目錄中。
另外,無論文本文件中的數字是否都是整數,默認數據類型都是 float64
:
print(a.dtype)
float64
指定所需的數據類型
再次假設我們有以下名為 my_data.txt
的 text-file :
1 2 3 4
5 6 7 8
我們可以使用 dtype
指定類型,而不是使用默認的 float64
:
a = np.genfromtxt("my_data.txt", dtype=int)
a
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
現在,所有值的類型均為 float64
。
您還可以傳遞類型列表以將不同類型分配給不同的列:
a = np.genfromtxt("my_data.txt", dtype=[np.int,32 int, np.float,32 float])
a
array([(1, 2, 3., 4.), (5, 6, 7., 8.)],
dtype=[('f0', '<i4'), ('f1', '<i8'), ('f2', '<f4'), ('f3', '<f8')])
這裏,i4
代表int32
,而i8
代表int64
。
請注意,這是一種特殊類型的 Numpy 數組,稱為結構化數組。這種類型的數組在實踐中並不經常使用,因為 Pandas 庫中的 Series 和 DataFrames 是具有更多函數的替代方案。
指定自定義分隔符
假設我們的my_data.txt
文件如下:
1,2
3,4
由於我們的數據是逗號分隔的,因此設置delimiter=","
如下:
a = np.genfromtxt("my_data.txt", delimiter=",")
a
1,2
3,4
處理評論
假設我們的my_data.txt
文件如下:
1,2,3,4 / I'm the first row!
5,6,7,8 / I'm the second row!
要刪除 text-file 中的注釋,請指定 comments
:
a = np.genfromtxt("my_data.txt", delimiter=",", comments="/")
a
array([[1., 2., 3., 4.],
[5., 6., 7., 8.]])
指定skip_header
假設我們的my_data.txt
文件如下:
1 2 3
4 5 6
7 8 9
要跳過第一行:
a = np.genfromtxt("my_data.txt", skip_header=1)
a
array([[4., 5., 6.],
[7., 8., 9.]])
指定skip_footer
假設我們的my_data.txt
文件如下:
1 2 3
4 5 6
7 8 9
要跳過最後一行:
a = np.genfromtxt("my_data.txt", skip_footer=1)
a
array([[1., 2., 3.],
[4., 5., 6.]])
指定轉換器
假設我們的my_data.txt
文件如下:
1 2
3 4
舉個任意的例子,假設我們想將第一列的所有值加 10,並使第二列的所有值都為 20:
a = np.genfromtxt("my_data.txt", converters={0: lambda x: int(x) + 10, 1: lambda x: 20})
a
array([(11, 20),
(13, 20)], dtype=[('f0', '<i8'), ('f1', '<i8')])
這裏,"f0"
和"f1"
是字段名稱,並且"i8"
表示int64
數據類型。
指定missing_values
假設我們的my_data.txt
文件如下:
3,??
,6
所有缺失和無效的值都被視為 nan
,因此您不需要在此處指定 missing_values="??"
:
a = np.genfromtxt("my_data.txt", delimiter=",")
a
array([[ 3., nan],
[nan, 6.]])
請注意,無法將值 6 設置為缺失值。僅當您設置 usemask=True
時, missing_values
才會發揮作用。
這是沒有 missing_values
的 usemask=True
:
a = np.genfromtxt("my_data.txt", delimiter=",", usemask=True)
a
masked_array(
data=[[3.0, nan],
[--, 6.0]],
mask=[[False, False],
[ True, False]],
fill_value=1e+20)
請注意此處如何區分缺失值和無效值 - ??
已映射到 nan
,掩碼布爾值標記為 False
,而實際缺失值已映射到 --
,掩碼布爾值設置為 True
.
現在,這是 usemask=True
和 missing_values="??"
:
a = np.genfromtxt("my_data.txt", delimiter=",", missing_values="??", usemask=True)
a
masked_array(
data=[[3.0, --],
[--, 6.0]],
mask=[[False, True],
[ True, False]],
fill_value=1e+20)
這裏的關鍵是, ??
本質上是一個無效值,現在被視為 missing_value 。
指定filling_values
默認情況下,所有缺失和無效的值都將替換為 nan。要更改此設置,請指定 filling_values
,如下所示:
a = np.genfromtxt("my_data.txt", delimiter=",", filling_values=0)
a
array([[3., 0.],
[0., 6.]])
您還可以傳入一個字典,其中包含以下鍵值對:
-
key:列整數索引
-
value:填充值
例如,設置將第一列的所有缺失值和無效值映射到 -1,將第二列的所有缺失值和無效值映射到 -2:
a = np.genfromtxt("my_data.txt", delimiter=",", filling_values={0:-1, 1:-2})
a
array([[ 3., -2.],
[-1., 6.]])
隻讀取某些列
假設我們的my_data.txt
文件如下:
1 2 3
4 5 6
僅讀取第一列和第三列(即列索引 0 和 2):
a = np.genfromtxt("my_data.txt", usecols=[0,2])
a
array([[1., 3.],
[4., 6.]])
指定名稱
假設我們的my_data.txt文件如下:
3 4
5 6
為每列指定名稱:
a = np.genfromtxt("my_data.txt", names=("A","B"))
a
array([(3., 4.),
(5., 6.)],
dtype=[('A', '<f8'), ('B', '<f8')])
在這裏,我們將名稱 A 分配給第一列。請注意, f8
僅表示類型 float64
。
指定排除列表
假設我們的my_data.txt
文件如下:
3 4 5
6 7 8
要將 _
附加到某些名稱:
a = np.genfromtxt("my_data.txt", names=["A","B","C"], excludelist=["A"])
a
array([(3., 4., 5.), (6., 7., 8.)],
dtype=[('A_', '<f8'), ('B', '<f8'), ('C', '<f8')])
請注意我們如何將 A_
作為第一列的字段名稱。
指定刪除字符
假設我們的my_data.txt
文件如下:
3 4
5 6
要從字段名稱中刪除字符 "c"
:
a = np.genfromtxt("my_data.txt", names=["Ab","BcD"], deletechars="c")
a
array([(3., 4.), (5., 6.)], dtype=[('Ab', '<f8'), ('BD', '<f8')])
要刪除多個字符:
a = np.genfromtxt("my_data.txt", names=["Ab","BcD"], deletechars=["c","A"])
a
array([(3., 4.), (5., 6.)], dtype=[('b', '<f8'), ('BD', '<f8')])
指定defaultfmt
假設我們的my_data.txt
文件如下:
3 4
5 6
如果返回結果是結構化數組,並且未定義 names
參數,則字段名稱默認采用 "f0"
、 "f1"
等值:
a = np.genfromtxt("my_data.txt", dtype=[int, float])
a
array([(3, 4.), (5, 6.)], dtype=[('f0', '<i8'), ('f1', '<f8')])
要對此進行自定義,請傳遞 defaultfmt
參數:
a = np.genfromtxt("my_data.txt", dtype=[int, float], defaultfmt="my_var_%i")
a
array([(3, 4.), (5, 6.)], dtype=[('my_var_0', '<i8'), ('my_var_1', '<f8')])
這裏,%i
是列整數索引的占位符。
指定自動刪除
假設我們的my_data.txt
文件如下:
3,a, 4
5 ,b c,6
默認情況下,值中出現的所有空格均保持不變:
a = np.genfromtxt("my_data.txt", delimiter=",", dtype="U")
a
array([['3', 'a', ' 4'],
['5 ', 'b c', '6']], dtype='<U5')
如果要去掉前導和尾隨空格,請設置autostrip=True
,如下所示:
a = np.genfromtxt("my_data.txt", delimiter=",", autostrip=True, dtype="U")
a
array([['3', 'a', '4'],
['5', 'b c', '6']], dtype='<U3')
請注意 "b c"
中的空格仍然存在。
指定replace_space
假設我們的my_data.txt
如下:
3 4
5 6
默認情況下,非前導和非尾隨空格替換為 _
:
a = np.genfromtxt("my_data.txt", names=["A B", " C "])
a
array([(3., 4.), (5., 6.)], dtype=[('A_B', '<f8'), ('C', '<f8')])
請注意前導空格和尾隨空格是如何被去除的。
要用自定義字符串替換空格,請設置 replace_space
參數,如下所示:
a = np.genfromtxt("my_data.txt", names=["A B", " C "], replace_space="K")
a
array([(3., 4.), (5., 6.)], dtype=[('AKB', '<f8'), ('C', '<f8')])
指定case_sensitive
假設我們的my_data.txt
如下:
3 4
5 6
默認情況下,case_sensitive 設置為 True,這意味著字段名稱保持原樣。
a = np.genfromtxt("my_data.txt", names=["Ab", "dC"])
a
array([(3., 4.), (5., 6.)], dtype=[('Ab', '<f8'), ('dC', '<f8')])
要將字段名稱轉換為大寫,請設置 "upper"
或 False
:
a = np.genfromtxt("my_data.txt", names=["Ab", "dC"], case_sensitive=False)
a
array([(3., 4.), (5., 6.)], dtype=[('AB', '<f8'), ('DC', '<f8')])
要將字段名稱轉換為小寫,請設置 "lower"
:
a = np.genfromtxt("my_data.txt", names=["Ab", "dC"], case_sensitive="lower")
a
array([(3., 4.), (5., 6.)], dtype=[('ab', '<f8'), ('dc', '<f8')])
指定解包
假設我們的my_data.txt
文件如下:
1 2
3 4
要檢索每列的數據而不是單個 Numpy 數組:
col_one, col_two = np.genfromtxt("my_data.txt", unpack=True)
print("col_one:", col_one)
print("col_two:", col_two)
col_one: [3. 5.]
col_two: [4. 6.]
指定鬆散
假設我們的my_data.txt
文件如下:
3 4
5 ??
默認情況下, loose=True
,這意味著無效值(例如此處的 ??
)將轉換為 nan
:
a = np.genfromtxt("my_data.txt")
a
array([[ 3., 4.],
[ 5., nan]])
如果我們的文件包含無效值,要引發錯誤,請設置 loose=False
,如下所示:
a = np.genfromtxt("my_data.txt", loose=False)
a
ValueError: Cannot convert string '??'
指定invalid_raise
假設我們的my_data.txt文件如下:
3,4
5
7,8
此處,盡管數組看似有 2 列,但第二行僅包含 1 個值。
默認情況下, invalid_raise=True
,這意味著如果文件包含無效行,則會引發錯誤:
a = np.genfromtxt("my_data.txt", delimiter=",")
a
ValueError: Some errors were detected!
Line #2 (got 1 columns instead of 2)
我們可以通過將其設置為 False
來選擇忽略無效行,如下所示:
a = np.genfromtxt("my_data.txt", delimiter=",", invalid_raise=False)
a
array([[3., 4.],
[7., 8.]])
不會引發任何錯誤,但 Numpy 足夠好,可以向我們發出警告:
ConversionWarning: Some errors were detected!
Line #2 (got 1 columns instead of 2)
指定所需尺寸
假設我們的 sample.txt
隻有一行:
1 2 3 4
默認情況下,loadtxt(~)
將生成一個一維數組:
a = np.loadtxt("sample.txt")
a
array([1., 2., 3., 4.])
我們可以通過以下方式指定我們希望數組是二維的:
a = np.loadtxt("sample.txt", ndmin=2)
a
array([[1., 2., 3., 4.]])
指定max_rows
假設我們的my_data.txt
文件如下:
1 2
3 4
5 6
僅讀取前兩行而不是整個文件:
a = np.genfromtxt("myy_data.txt", max_rows=2)
a
array([[1., 2.],
[3., 4.]])
相關用法
- Python genericalias.__parameters__用法及代碼示例
- Python Django get_language_info用法及代碼示例
- Python Pandas get_dummies方法用法及代碼示例
- Python PIL getbands() and getextrema()用法及代碼示例
- Python PIL getpixel()用法及代碼示例
- Python getattr()用法及代碼示例
- Python OpenCV getTrackbarPos()用法及代碼示例
- Python Django get用法及代碼示例
- Python NumPy get_printoptions方法用法及代碼示例
- Python OpenCV getgaussiankernel()用法及代碼示例
- Python OpenCV getRotationMatrix2D()用法及代碼示例
- Python Django get_messages用法及代碼示例
- Python PIL getbands()用法及代碼示例
- Python gettext.GNUTranslations.ngettext用法及代碼示例
- Python PIL getpalette()用法及代碼示例
- Python PIL getcolors()用法及代碼示例
- Python Django get_user_model用法及代碼示例
- Python NumPy geomspace方法用法及代碼示例
- Python gettext.NullTranslations.install用法及代碼示例
- Python Tableau groups.update用法及代碼示例
- Python gzip.compress(s)用法及代碼示例
- Python globals()用法及代碼示例
- Python Tableau groups.delete用法及代碼示例
- Python Tableau groups.create用法及代碼示例
- Python numpy string greater_equal()用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 NumPy | genfromtxt method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。