1. 程式人生 > 其它 >Numpy,Pandas基本用法

Numpy,Pandas基本用法

Numpy使用

1. 陣列建立

1.1. 建立新陣列

numpy.empty(shape,dtype = float, order = 'C', like = None)

建立一個空陣列
shape:int或int元組
dtype:資料輸出的型別,預設為numpy.float64,
order:順序,預設為'C'行優先,或可為'F'列優先
like:引用物件允許建立非NumPy陣列的陣列

2. numpy的四則運算

# 向量與向量之間
# 加法
np.add(a,b)
a + b
# 減法
np.subtract(a,b)
a - b
# 乘法(X乘)
np.multiply(a,b)
a * b
# 點乘
np.dot(a,b)
# 除法
np.divide(a,b)
a / b

# 向量與標量之間
# 加法
a + 1
# 減法
a - 1
# 乘法
a * 2
# 除法
a / 2
# 求餘
a % 2
# 矩陣轉置
a.T
# 矩陣的逆(矩陣滿秩)
import numpy.linalg as lg
lg.inv(a)

3. Numpy陣列的切片與索引

a[3:7] # 提取a[3]-a[6]的值
a[:7:2] # 提取a[0]-a[6]每次遞增2
a[::-1] # 反轉陣列
a[1,:2] # 獲取第一維前兩個數

4. Numpy陣列的堆疊

# 改變陣列形狀
# reshape()
b = np.arange(24),reshape(2,3,4) # 三重陣列
# ravel()
# 將多維陣列拆解為一維陣列
b.ravel()
# flatten()
# 拉直,功能與ravel()相同,不過flatten()返回的是真實的陣列,需要分配新的記憶體空間,ravel()僅改變檢視。
b.flatten()
# shape()
# 使用元組改變陣列形狀
b.shape = (6,4)
# transpose()
# 轉置
b.transpose() # (6,4)變為(4,6)

# 陣列的堆疊
a = np.arange(9).reshape(3,3)
b = a * 2
# hstack()
# 水平疊加
np.hstack((a,b)) # (3,3)變為(3,6)
# vstack()
# 垂直疊加
np.vstack((a,b)) # (3,3)變為(6,3)
# 深度疊加
np.dstack((a,b)) # (3,3)變為(3,3,2)

5. Numpy的拆分

a = np.arange(9).reshape(3,3)
# 拆分陣列
# hsplit()
# 橫向拆分
np.hsplit(a,3)
# vsplit()
# 縱向拆分
np.vsplit(a,3)
# dsplit()
# 深度拆分
# 深度拆分要求陣列的秩大於等於3
np.dsplit(a,3)

6. Numpy比較運算

比較運算子在numpy中也是通過通用函式來實現,具體如下:

比較運算子 通用函式
== np.equal
!= np.not_equal
< np.less
<= np.less_equal
> np.greater
>= np.greater_equal

布林邏輯

邏輯運算子 通用函式
& np.bitwise_and
| np.bitwise_or
^ np.bitwise_xor
~ np.bitwise_not
data=np.array([('Alice', 4, 40), ('Bob', 11, 85.5) ,('Cathy', 7, 68.0),('Doug', 9, 60)],dtype=[("name","S10"),("age","int"),("score","float")])
 print(data)
'''
輸出:[(b'Alice',  4, 40. )
(b'Bob', 11, 85.5)
(b'Cathy',  7, 68. )
 (b'Doug',  9, 60. )]
'''
 print(data["score"]>60)  #使用比較運算得的一個布林陣列
'''
輸出:[False  True  True False]
'''
 print(data[data["score"]>60])  #進行簡單的索引,即掩碼操作將值為True的選出
'''
輸出:[(b'Bob', 11, 85.5) (b'Cathy',  7, 68. )]
'''

Pandas使用

1. Pandas包的匯入

from pandas import Series,DataFrame
import pandas as pd

1.1. Pandas中的資料結構

  • Series:一維陣列,類似於Python中的基本資料結構list,區別是Series只允許儲存相同的資料型別,這樣可以更有效的使用記憶體,提高運算效率。就像資料庫中的列資料;
  • DataFrame:二維的表格型資料結構。很多功能與R中的data.frame類似。可以將DataFrame理解為Series的容器。
  • Panel:三位的陣列,可以理解為DataFrame的容器。

2. Series

# 自動建立索引
In [1]:obj=Series([4,7,-5,3])
In [2]:obj
Out[2]:
0 4
1 7
2 -5
3 3
# 手動設定索引
In [5]:obj2=Series([4,7,-5,3],index=['d','b','a','c'])
In [6]:obj2
Out[6]:
d 4
b 7
a -5
c 3
# 字典方式建立
In [7]:sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
In [8]:obj3=Series(sdata)
In [9]:obj3
Out[9]:
Ohio   35000
Texas  71000
Oregon 16000
Utah   5000

3. DataFrame

DataFrame是一個表格型的資料結構,是以一個或多個二維塊存放的資料表格(層次化索引),DataFrame既有行索引還有列索引,它有一組有序的列,每列既可以是不同型別(數值、字串、布林型)的資料,或者可以看做由Series組成的字典。

# 建立DataFrame
dictionary = {'state':['0hio','0hio','0hio','Nevada','Nevada'],
             'year':[2000,2001,2002,2001,2002],
             'pop':[1.5,1.7,3.6,2.4,2.9]}
frame = DataFrame(dictionary)
# 修改行索引
frame = DataFrame(dictionary,index=["one","two","three","four","five"])
# 新增新列
frame["add"] = [0,0,0,0,0]
# 新增Series型別
value = Series([1,3,1,4,8,10],index=[0,1,2,3,4,5])
frame["add1"] = value