三 Python數(shù)據(jù)科學(xué)工具
1.Numpy
numpy是Python中一個(gè)非常重要的科學(xué)計(jì)算庫(kù),其最基礎(chǔ)的功能就是N維數(shù)組對(duì)象——ndarray。
1.1 數(shù)組的創(chuàng)建
1)np.array()
用
np.array()
函數(shù)可以將Python的序列對(duì)象(如列表、元組)轉(zhuǎn)換為ndarray數(shù)組。
import numpy as np
a = [1, 2, 3, 4]
arr = np.array(a)
print(arr)
2)arange、linspace、logspace
-
np.arange(start, stop, step)
:創(chuàng)建一個(gè)一維數(shù)組,其中的值是從start
到stop
(不包括stop
)的等差數(shù)列,步長(zhǎng)為step
。 -
np.linspace(start, stop, num)
:創(chuàng)建一個(gè)一維數(shù)組,其中的值是從start
到stop
(包括stop
)的等間距數(shù)列,數(shù)列中包含num
個(gè)值。 -
np.logspace(start, stop, num, base)
:創(chuàng)建一個(gè)一維數(shù)組,其中的值是從base
的start
次方到base
的stop
次方(包括stop
),數(shù)列中包含num
個(gè)值。
import numpy as np
# 創(chuàng)建一個(gè)等差數(shù)列
arr1 = np.arange(0, 10, 2)
print(arr1) # [0 2 4 6 8]
# 創(chuàng)建一個(gè)等間距數(shù)列
arr2 = np.linspace(0, 1, 5)
print(arr2) # [0. 0.25 0.5 0.75 1. ]
# 創(chuàng)建一個(gè)對(duì)數(shù)間距數(shù)列
arr3 = np.logspace(0, 2, 3, base=10)
print(arr3) # [ 1. 10. 100.]
3)創(chuàng)建特定數(shù)組
-
np.zeros(shape)
:創(chuàng)建一個(gè)所有元素都為0的數(shù)組,其中shape
是數(shù)組的形狀,可以是一個(gè)整數(shù)、元組或列表。 -
np.ones(shape)
:創(chuàng)建一個(gè)所有元素都為1的數(shù)組,形狀同上。 -
np.identity(n)
:創(chuàng)建一個(gè)n×n的單位矩陣(即對(duì)角線上的元素為1,其余元素為0的矩陣)。 -
np.empty(shape)
:創(chuàng)建一個(gè)指定形狀的空數(shù)組,其中的元素值可能是未初始化的隨機(jī)數(shù)據(jù)。 -
np.diag(v, k=0)
:創(chuàng)建一個(gè)以v為對(duì)角線元素的對(duì)角矩陣,其中k表示對(duì)角線的偏移量,可以為正(表示在主對(duì)角線之上)或者負(fù)(表示在主對(duì)角線之下)。
import numpy as np
# 創(chuàng)建一個(gè)所有元素都為0的3×3數(shù)組
arr1 = np.zeros((3, 3))
print(arr1)
'''
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
'''
# 創(chuàng)建一個(gè)所有元素都為1的2×2數(shù)組
arr2 = np.ones([2, 2])
print(arr2)
'''
[[1. 1.]
[1. 1.]]
'''
# 創(chuàng)建一個(gè)4×4的單位矩陣
arr3 = np.identity(4)
print(arr3)
'''
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
'''
# 創(chuàng)建一個(gè)2×3的空數(shù)組
arr4 = np.empty((2, 3))
print(arr4)
'''
[[1. 1. 1.]
[1. 1. 1.]]
'''
# 創(chuàng)建一個(gè)以[1, 2, 3]為對(duì)角線元素的對(duì)角矩陣
arr5 = np.diag([1, 2, 3])
print(arr5)
'''
[[1 0 0]
[0 2 0]
[0 0 3]]
'''
1.2 數(shù)組元素的訪問(wèn)
-
下標(biāo)或切片:
例如,對(duì)于一維數(shù)組arr,可以使用arr[0]來(lái)訪問(wèn)第一個(gè)元素,使用arr[1:3]來(lái)訪問(wèn)第2到第4個(gè)元素。
-
整數(shù)序列:
可以使用整數(shù)序列來(lái)訪問(wèn)任意元素,例如arr[[0, 2, 3]]將返回第1、3、4個(gè)元素組成的數(shù)組。
-
布爾數(shù)組:
可以使用一個(gè)布爾數(shù)組進(jìn)行索引,數(shù)組中為True的位置對(duì)應(yīng)的元素會(huì)被提取出來(lái),例如arr[arr > 5]將返回所有大于5的元素
import numpy as np
# 創(chuàng)建一個(gè)一維數(shù)組
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)
'''
[1 2 3 4 5]
'''
# 創(chuàng)建一個(gè)二維數(shù)組
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2)
'''
[[1 2 3]
[4 5 6]
[7 8 9]]
'''
# 使用下標(biāo)或切片訪問(wèn)數(shù)組元素
print(arr1[0]) # 輸出第一個(gè)元素
print(arr2[1, 2]) # 輸出第二行第三列的元素
'''
1
6
'''
# 使用整數(shù)序列訪問(wèn)數(shù)組元素
print(arr1[[0, 2, 4]]) # 輸出第1、3、5個(gè)元素
print(arr2[[0, 2], [1, 2]]) # 輸出(0,1)和(2,2)位置的元素
'''
[1 3 5]
[2 9]
'''
# 使用布爾數(shù)組訪問(wèn)數(shù)組元素
print(arr1[arr1 > 3]) # 輸出大于3的元素
print(arr2[arr2 % 2 == 0]) # 輸出所有偶數(shù)元素
'''
[12 15 18]
[2. 5. 8.]
'''
1.3 多維數(shù)組的axis參數(shù)
在多維數(shù)組中,我們可以通過(guò)指定axis參數(shù)來(lái)沿著某個(gè)軸進(jìn)行操作。
axis參數(shù)可以取0、1、2等值,表示對(duì)應(yīng)的維度。
例如,
對(duì)于一個(gè)二維數(shù)組,
axis=0表示沿著行的方向進(jìn)行操作,
而axis=1則表示沿著列的方向進(jìn)行操作。在一些函數(shù)中,axis也可以取負(fù)值,表示從后往前數(shù)的維度。
在實(shí)際操作中,我們經(jīng)常需要對(duì)多維數(shù)組進(jìn)行求和、平均、最大/小值等操作,這時(shí)就需要考慮axis參數(shù)的取值。
import numpy as np
# 創(chuàng)建一個(gè)二維數(shù)組
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 沿著行的方向?qū)?shù)組求和
print(np.sum(arr, axis=0)) # 輸出[12 15 18]
# 沿著列的方向?qū)?shù)組求和
print(np.sum(arr, axis=1)) # 輸出[ 6 15 24]
# 沿著行的方向?qū)?shù)組求平均值
print(np.mean(arr, axis=0)) # 輸出[4. 5. 6.]
# 沿著列的方向?qū)?shù)組求平均值
print(np.mean(arr, axis=1)) # 輸出[2. 5. 8.]
# 沿著第三個(gè)維度求和,但該數(shù)組只有兩個(gè)維度,所以會(huì)報(bào)錯(cuò)
try:
print(np.sum(arr, axis=2))
except Exception as e:
print(str(e)) # 輸出"axis 2 is out of bounds for array of dimension 2"
# 沿著負(fù)數(shù)的維度求和,即從后往前數(shù)的第二個(gè)維度
print(np.sum(arr, axis=-2)) # 輸出[12 15 18]
1.4 ufunc運(yùn)算
import numpy as np
# 創(chuàng)建兩個(gè)一維數(shù)組
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
# 加法
print(x + y) # 輸出[5 7 9]
# 減法
print(x - y) # 輸出[-3 -3 -3]
# 乘法
print(x * y) # 輸出[ 4 10 18]
# 除法
print(x / y) # 輸出[0.25 0.4 0.5 ]
# 冪運(yùn)算
print(x ** 2) # 輸出[1 4 9]
# 正弦函數(shù)
print(np.sin(x)) # 輸出[0.84147098 0.90929743 0.14112001]
# 余弦函數(shù)
print(np.cos(y)) # 輸出[-0.65364362 0.28366219 0.96017029]
# 平方根函數(shù)
print(np.sqrt(x)) # 輸出[1. 1.41421356 1.73205081]
# 指數(shù)函數(shù)
print(np.exp(y)) # 輸出[ 54.59815003 148.4131591 403.42879349]
# 自然對(duì)數(shù)函數(shù)
print(np.log(y)) # 輸出[1.38629436 1.60943791 1.79175947]
# 創(chuàng)建一個(gè)二維數(shù)組
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 沿著行的方向?qū)?shù)組求和
print(np.sum(arr, axis=0)) # 輸出[12 15 18]
# 沿著列的方向?qū)?shù)組求平均值
print(np.mean(arr, axis=1)) # 輸出[2. 5. 8.]
1.5 向量與矩陣運(yùn)算
向量表示為一維數(shù)組,矩陣表示為二維數(shù)組。
1)向量?jī)?nèi)積
向量?jī)?nèi)積是兩個(gè)向量對(duì)應(yīng)位置元素的乘積之和,可以用來(lái)計(jì)算向量之間的相似度。
當(dāng)兩個(gè)向量之間的夾角越小時(shí),它們的內(nèi)積也就越大,說(shuō)明它們之間的相似度越高。
import numpy as np
x1 = np.array([1, 2, 3])
x2 = np.array([4, 5, 6])
print(np.dot(x1, x2))
# 輸出32(1*4 + 2*5 + 3*6)
2)矩陣基本運(yùn)算
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(a + b) # 對(duì)應(yīng)位置相加
# 輸出 [[ 6 8]
# [10 12]]
print(a - b) # 對(duì)應(yīng)位置相減
# 輸出 [[-4 -4]
# [-4 -4]]
print(a * b) # 對(duì)應(yīng)位置相乘
# 輸出 [[ 5 12]
# [21 32]]
print(b / a) # 對(duì)應(yīng)位置相除
# 輸出 [[5. 3. ]
# [2.33333333 2. ]]
print(b // a) # 對(duì)應(yīng)位置整除
# 輸出 [[5 3]
# [2 2]]
print(b % a) # 對(duì)應(yīng)位置取模
# 輸出 [[0 0]
# [1 0]]
print(a ** 2) # 冪運(yùn)算
# 輸出 [[ 1 4]
# [ 9 16]]
print(a @ b) # 矩陣乘積
# 輸出 [[19 22]
# [43 50]]
3)矩陣轉(zhuǎn)置
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.T)
# 輸出 [[1 4]
# [2 5]
# [3 6]]
4)數(shù)據(jù)排序
可以使用
sort()
函數(shù)對(duì)數(shù)組進(jìn)行排序。默認(rèn)情況下,該函數(shù)按升序排序,如果需要降序排序則需要傳入?yún)?shù)kind='quicksort', order=大于時(shí)為-1, 小于時(shí)為1
。
import numpy as np
a = np.array([3, 1, 2])
print(np.sort(a)) # 升序排序,輸出[1 2 3]
print(np.sort(a)[::-1]) # 降序排序,輸出[3 2 1]
sort()
函數(shù)還支持按照指定軸進(jìn)行排序。
import numpy as np
a = np.array([[3, 2], [1, 4]])
print(np.sort(a, axis=0)) # 對(duì)列排序,輸出[[1 2] [3 4]]
print(np.sort(a, axis=1)) # 對(duì)行排序,輸出[[2 3] [1 4]]
2.Pandas
2.1 Series
Series是一維的序列,可以看作由一組數(shù)據(jù)及其對(duì)應(yīng)的索引組成。
- 創(chuàng)建
import pandas as pd
data = pd.Series([0.25, 0.5, 0.75, 1.0])
print(data)
'''
0 0.25
1 0.50
2 0.75
3 1.00
dtype: float64
'''
-
訪問(wèn)元素
對(duì)于Series,可以使用位置索引或者標(biāo)簽索引來(lái)訪問(wèn)單個(gè)元素或者多個(gè)元素。
import pandas as pd data = pd.Series([0.25, 0.5, 0.75, 1.0]) print(data[0]) # 輸出第一個(gè)元素 ''' 0.25 ''' print(data[:2]) # 輸出前兩個(gè)元素 ''' 0 0.25 1 0.50 dtype: float64 ''' print(data[[1,3]]) # 輸出第二個(gè)和第四個(gè)元素 ''' 1 0.50 3 1.00 dtype: float64 '''
2.2 DataFrame
DataFrame是二維的表結(jié)構(gòu),可以看作是由多個(gè)Series組成。
每一列的數(shù)據(jù)類型可以不同,但是同一列中的數(shù)據(jù)類型必須相同。
- 定義
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'gender': ['F', 'M', 'M', 'F']}
df = pd.DataFrame(data)
print(df)
'''
name age gender
0 Alice 25 F
1 Bob 30 M
2 Charlie 35 M
3 David 40 F
'''
-
訪問(wèn)元素
對(duì)于DataFrame,可以使用列標(biāo)簽和行標(biāo)簽來(lái)訪問(wèn)單個(gè)元素或者多個(gè)元素。
import pandas as pd data = {'name': ['Alice', 'Bob', 'Charlie', 'David'], 'age': [25, 30, 35, 40], 'gender': ['F', 'M', 'M', 'F']} df = pd.DataFrame(data) print(df['name']) # 輸出name這一列的所有元素 ''' 0 Alice 1 Bob 2 Charlie 3 David Name: name, dtype: object ''' print(df.loc[1]) # 輸出第二行的所有元素 ''' name Bob age 30 gender M Name: 1, dtype: object ''' print(df.iloc[0:2, 1:]) # 輸出前兩行,從第二列開(kāi)始的所有元素 ''' age gender 0 25 F 1 30 M '''
2.3 布爾類型數(shù)組索引
布爾型數(shù)組索引是指通過(guò)一個(gè)布爾值的數(shù)組來(lái)進(jìn)行切片。
這個(gè)數(shù)組的長(zhǎng)度必須和被索引的Series或DataFrame的長(zhǎng)度相同,其中每個(gè)元素代表著這個(gè)位置是否被選中。
True:選中
False:未選中
-
對(duì)Series
import pandas as pd data = pd.Series([0.25, 0.5, 0.75, 1.0]) bool_arr = [True, False, True, False] print(data[bool_arr]) # 輸出第一和第三個(gè)元素 ''' 0 0.25 2 0.75 dtype: float64 '''
-
對(duì)DataFrame文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-494838.html
import pandas as pd data = {'name': ['Alice', 'Bob', 'Charlie', 'David'], 'age': [25, 30, 35, 40], 'gender': ['F', 'M', 'M', 'F']} df = pd.DataFrame(data) bool_arr = [False, True, False, True] print(df[bool_arr]) # 輸出第二和第四行的所有元素 ''' name age gender 1 Bob 30 M 3 David 40 F '''
[bool_arr]) # 輸出第一和第三個(gè)元素
‘’’
0 0.25
2 0.75
dtype: float64
‘’’文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-494838.html
* 對(duì)DataFrame
```python
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'gender': ['F', 'M', 'M', 'F']}
df = pd.DataFrame(data)
bool_arr = [False, True, False, True]
print(df[bool_arr]) # 輸出第二和第四行的所有元素
'''
name age gender
1 Bob 30 M
3 David 40 F
'''
到了這里,關(guān)于【Python】數(shù)據(jù)科學(xué)工具(Numpy Pandas np.array() 創(chuàng)建訪問(wèn)數(shù)組 向量與矩陣 Series DataFrame)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!