資料分析Numpy(7) 資料的輸入輸出

2021-10-24 19:57:16 字數 3900 閱讀 1013

genfromtxt匯入資料:簡而言之,genfromtxt主要運用兩種迴圈第乙個迴圈以字串序列轉換檔案的每一行。第二個迴圈將每個字串轉換為適當的資料型別,考慮到缺失值的情況。genfromtxt的唯一強制引數是資料的**。它可以是乙個字串,一串字串或乙個生成器。如果提供了單個字串,則假定它是本地或遠端檔案的名稱,或者帶有read方法的開放檔案類物件。

識別的檔案型別是文字檔案和檔案。目前,該功能可識別gzipbz2(bzip2)檔案。歸檔檔案的型別由檔案的副檔名決定:如果檔名以'.gz'結尾,則需要乙個gzip歸檔檔案;如果它以'bz2'結尾,則假定bzip2存檔。

delimiter引數:一旦檔案被定義並開啟進行讀取,genfromtxt會將每個非空行分割為一串字串。 空的或注釋的行只是略過。delimiter關鍵字用於定義拆分應該如何進行。預設情況下,genfromtxt假定delimiter=none,意味著該行沿著空白區域(包括製表符)分割,並且連續的空白區域被視為單個空白區域。或者,我們可能正在處理乙個固定寬度的檔案,其中列被定義為給定數量的字元。在這種情況下,我們需要將delimiter設定為單個整數(如果所有列的大小相同)或整數序列(如果列的大小可能不同)

import numpy as np

from io import bytesio

data = "1, 2, 3\n4, 5, 6"

print(np.genfromtxt(bytesio(data), delimiter=","))

'''array([[ 1., 2., 3.],

[ 4., 5., 6.]])

'''

>>> data = "  1  2  3\n  4  5 67\n890123  4"

>>> np.genfromtxt(bytesio(data), delimiter=3)

array([[ 1., 2., 3.],

[ 4., 5., 67.],

[ 890., 123., 4.]])

>>> data = "123456789\n 4 7 9\n 4567 9"

>>> np.genfromtxt(bytesio(data), delimiter=(4, 3, 2))

array([[ 1234., 567., 89.],

[ 4., 7., 9.],

[ 4., 567., 9.]])

autostrip引數

預設情況下,當一行被分解為一系列字串時,單個條目不會被剝離前導空白或尾隨空白。通過將可選引數autostrip設定為值true,可以覆蓋此行為:

>>> data = "1, abc , 2\n 3, ***, 4"

>>> # without autostrip

>>> np.genfromtxt(bytesio(data), delimiter=",", dtype="|s5")

array([['1', ' abc ', ' 2'],

['3', ' ***', ' 4']],

dtype='|s5')

>>> # with autostrip

>>> np.genfromtxt(bytesio(data), delimiter=",", dtype="|s5", autostrip=true)

array([['1', 'abc', '2'],

['3', '***', '4']],

dtype='|s5')

#comments引數

>>> data = """#

... # skip me !

... # skip me too !

... 1, 2

... 3, 4

... 5, 6 #this is the third line of the data

... 7, 8

... # and here comes the last line

... 9, 0

... """

>>> np.genfromtxt(bytesio(data), comments="#", delimiter=",")

[[ 1. 2.]

[ 3. 4.]

[ 5. 6.]

[ 7. 8.]

[ 9. 0.]]

skip_headerskip_footer引數

檔案中存在標題可能會妨礙資料處理。在這種情況下,我們需要使用skip_header可選引數。此引數的值必須是乙個整數,與執行任何其他操作之前在檔案開頭跳過的行數相對應。同樣,我們可以使用skip_footer屬性跳過檔案的最後一行n,並給它乙個n的值,預設情況下,skip_header=0skip_footer=0.

>>> data = "\n".join(str(i) for i in range(10))

>>> np.genfromtxt(bytesio(data),)

array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

>>> np.genfromtxt(bytesio(data),

... skip_header=3, skip_footer=5)

array([ 3., 4.])

usecols引數

在某些情況下,我們對資料的所有列不感興趣,但只有其中的一小部分。我們可以用usecols引數選擇要匯入的列。該引數接受與要匯入的列的索引相對應的單個整數或整數序列。請記住,按照慣例,第一列的索引為0。負整數的行為與常規python負向索引相同。

例如,如果我們只想匯入第一列和最後一列,我們可以使用usecols =(0, -1)

>>> data = "1 2 3\n4 5 6"

>>> np.genfromtxt(bytesio(data), usecols=(0, -1))

array([[ 1., 3.],

[ 4., 6.]])

如果列有名稱,我們也可以通過將它們的名稱提供給usecols引數來選擇要匯入哪些列,可以將其作為字串序列或逗號分隔字串:

>>> data = "1 2 3\n4 5 6"

>>> np.genfromtxt(bytesio(data),

... names="a, b, c", usecols=("a", "c"))

array([(1.0, 3.0), (4.0, 6.0)],

dtype=[('a', '>> np.genfromtxt(bytesio(data),

... names="a, b, c", usecols=("a, c"))

array([(1.0, 3.0), (4.0, 6.0)],

dtype=[('a', '更多引數和功能請查閱numpy中文網。

資料分析手冊 Numpy 7 花哨的索引

花哨的索引 fancy indexing 花哨的索引不同於前面的簡單索引得到的標量,而是直接得到的是傳遞的索引陣列。且能夠讓我們能夠快速獲得並修改複雜的陣列值得字資料集。探索花哨的索引 花哨的索引在概念上非常簡單,它意味著傳遞乙個索引陣列來一次性獲得多個陣列元素。import numpy as np...

numpy資料分析

2020 11 2 import array arr array.array i list range 10 i表示整型,生成序列後不能改變資料型別 多維陣列ndarray方便處理多維度運算,運算效率高 nparr np.array list range 10 修改值,浮點數取整數段 nparr 2...

資料分析 Numpy

什麼是numpy numpy這個詞 於兩個單詞 numerical和python。numpy是python中的乙個運算速度非常快的乙個數學庫,它非常重視陣列,很多的資料科學的包都是依賴於numpy的。它允許你在python中進行向量和矩陣計算,並且由於許多底層函式實際上是用c編寫的,因此你可以體驗在...