我們知道 Pandas 是在 NumPy 的基礎(chǔ)構(gòu)建而來,因此,熟悉 NumPy 可以更加有效的幫助我們使用 Pandas。
NumPy 主要用 C語言編寫,因此,在計算還和處理一維或多維數(shù)組方面,它要比 Python 數(shù)組快得多。關(guān)于 NumPy 的學(xué)習(xí),可以參考《Python NumPy教程》。
數(shù)組的主要作用是在一個變量中存儲多個值。NumPy 可以輕松地處理多維數(shù)組,示例如下:
import numpy as np
arr = np.array([2, 4, 6, 8, 10, 12])
print(type(arr))
print ("打印新建數(shù)組: ",end="")
#使用for循環(huán)讀取數(shù)據(jù)
for l in range (0,5):
print (arr[l], end=" ")
輸出結(jié)果:
<class 'numpy.ndarray'> 打印新建數(shù)組: 2 4 6 8 10
雖然 Python 本身沒有數(shù)組這個說法,不過 Python 提供一個 array 模塊,用于創(chuàng)建數(shù)字、字符類型的數(shù)組,它能夠容納字符型、整型、浮點(diǎn)型等基本類型。示例如下:
import array
#注意此處的 'l' 表示有符號int類型
arr = array.array('l', [2, 4, 6, 8, 10, 12])
print(type(arr))
print ("新建數(shù)組: ",end="")
for i in range (0,5):
print (arr[i], end=" ")
輸出結(jié)果:
<class 'array.array'> 新建數(shù)組: 2 4 6 8 10
布爾索引是 NumPy 的重要特性之一,通常與 Pandas 一起使用。它的主要作用是過濾 DataFrame 中的數(shù)據(jù),比如布爾值的掩碼操作。
下面示例展示了如何使用布爾索引訪問 DataFrame 中的數(shù)據(jù)。
首先創(chuàng)建一組包含布爾索引的數(shù)據(jù),如下所示:
import pandas as pd
dict = {'name':["Smith", "William", "Phill", "Parker"],
'age': ["28", "39", "34", "36"]}
info = pd.DataFrame(dict, index = [True, True, False, True])
print(info)
輸出結(jié)果:
name age True Smith 28 True William 39 False Phill 34 True Parker 36
然后使用.loc訪問索引為 True 的數(shù)據(jù)。示例如下:
import pandas as pd
dict = {'name':["Smith", "William", "Phill", "Parker"],
'age': ["28", "39", "34", "36"]}
info = pd.DataFrame(dict, index = [True, True, False, True])
#返回所有為 True的數(shù)據(jù)
print(info.loc[True])
輸出結(jié)果:
name age True Smith 28 True William 39 True Parker 36
在不改變數(shù)組數(shù)據(jù)的情況下,對數(shù)組進(jìn)行變形操作,即改變數(shù)組的維度,比如 2*3(兩行三列)的二維數(shù)組變維 3*2(三行兩列)的二維數(shù)組。變形操作可以通過 reshape() 函數(shù)實(shí)現(xiàn)。
示例如下:
import numpy as np
arr = np.arange(16)
print("原數(shù)組: \n", arr)
arr = np.arange(16).reshape(2, 8)
print("\n變形后數(shù)組:\n", arr)
arr = np.arange(16).reshape(8 ,2)
print("\n變形后數(shù)組:\n", arr)
輸出結(jié)果:
原數(shù)組:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] 變形后數(shù)組: [[ 0 1 2 3 4 5 6 7] [ 8 9 10 11 12 13 14 15]] 變形后數(shù)組: [[ 0 1] [ 2 3] [ 4 5] [ 6 7] [ 8 9] [10 11] [12 13] [14 15]]
Pandas 和 NumPy 被認(rèn)為是科學(xué)計算與機(jī)器學(xué)習(xí)中必不可少的庫,因?yàn)樗鼈兙哂兄庇^的語法和高性能的矩陣計算能力。下面對 Pandas 與 NumPy 進(jìn)行簡單的總結(jié),如下表所示:
比較項(xiàng) | Pandas | NumPy |
---|---|---|
適應(yīng)性 | Pandas主要用來處理類表格數(shù)據(jù)。 | NumPy 主要用來處理數(shù)值數(shù)據(jù)。 |
工具 | Pandas提供了Series和DataFrame數(shù)據(jù)結(jié)構(gòu)。 | NumPy 構(gòu)建了 ndarray array來容納數(shù)據(jù)。 |
性能 | Pandas對于處理50萬行以上的數(shù)據(jù)更具優(yōu)勢。 | NumPy 則對于50萬以下或者更少的數(shù)據(jù),性能更佳。 |
內(nèi)存利用率 | 與 NumPy相比,Pandas會消耗大量的內(nèi)存。 | NumPy 會消耗較少的內(nèi)存。 |
對象 | Pandas 提供了 DataFrame 2D數(shù)據(jù)表對象。 | NumPy 則提供了一個多維數(shù)組 ndarray 對象 |
在某些情況下,需要執(zhí)行一些 NumPy 數(shù)值計算的高級函數(shù),這個時候您可以使用 to_numpy() 函數(shù),將 DataFrame 對象轉(zhuǎn)換為 NumPy ndarray 數(shù)組,并將其返回。函數(shù)的語法格式如下:
?DataFrame.to_numpy(dtype=None, copy=False)
?
參數(shù)說明如下:
下面使用示例,了解該函數(shù)的使用方法。示例 1:
info = pd.DataFrame({"P": [2, 3], "Q": [4.0, 5.8]})
#給info添加R列
info['R'] = pd.date_range('2020-12-23', periods=2)
print(info)
#將其轉(zhuǎn)化為numpy數(shù)組
n=info.to_numpy()
print(n)
print(type(n))
輸出結(jié)果:
[[2 4.0 Timestamp('2020-12-23 00:00:00')] [3 5.8 Timestamp('2020-12-24 00:00:00')]]
可以通過 type 查看其類型,輸出如下:
?numpy.ndarray
?
示例2:
import pandas as pd
#創(chuàng)建DataFrame對象
info = pd.DataFrame([[17, 62, 35],[25, 36, 54],[42, 20, 15],[48, 62, 76]],
columns=['x', 'y', 'z'])
print('DataFrame\n----------\n', info)
#轉(zhuǎn)換DataFrame為數(shù)組array
arr = info.to_numpy()
print('\nNumpy Array\n----------\n', arr)
輸出結(jié)果:
DataFrame ---------- x y z 0 17 62 35 1 25 36 54 2 42 20 15 3 48 62 76 Numpy Array ---------- [[17 62 35] [25 36 54] [42 20 15] [48 62 76]]
更多建議: