Python 数据分析— Numpy 基本操作(下)

文章目录


学习内容:

一、数组的合并与分割

(一)数组的合并操作
1. concatenate((数组1,数组2,...),axis=[默认0:列数同,纵向合并 | 1:行数同,横向合并 | None: 合并为一维数组)

python 复制代码
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
np.concatenate((a, b), axis = 0)
#输出:array([[1, 2],
#            [3, 4],
#            [5, 6],
#            [7, 8]])
np.concatenate((a,b), axis = 1)
#输出:array([[1, 2, 5, 6],
#            [3, 4, 7, 8]])
np.concatenate((a,b), axis = None)
#输出:array([1, 2, 3, 4, 5, 6, 7, 8])
np.concatenate(a, None)
#输出:array([1, 2, 3, 4])

2. vstack((数组1, 数组2,...) ) 对列数相同的数组,纵向合并。等同于 concatenate 的 axis=0

python 复制代码
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
np.vstack((a, b))
#输出:array([[1, 2, 3, 4],
#            [5, 6, 7, 8]])

3. hstack((数组1, 数组2)) 对行数相同的数组,横向合并。等同于 concatenate 的 axis=1

python 复制代码
a = np.array([[1,2],[3,4]])
b = np.array([[5],[6]])
np.hstack((a, b))
#输出:array([[1, 2, 5],
#            [3, 4, 6]])

(二)数组的分割操作

split(目标数组, 索引或区段(如为整数则N平均分为N段), axis = 轴向(0默认纵向分割, 1横向分割)
1. 平均拆分为N段 (要求元素个数能被N整除,不能整除将报错)

python 复制代码
a = np.array([0,1,2,3,4,5])
np.split(a, 3) # 目标数组为1维,同np.split(a, 3, axis = 0) 或 函数hsplit(a, 3)
#输出:[array([0, 1]), array([2, 3]), array([4, 5])]

b = np.array((a,a,a))
np.split(b, 3, 0) # 目标数组为2维,同函数vsplit(b, 3)
#输出:[array([[0, 1, 2, 3, 4, 5]]),
#      array([[0, 1, 2, 3, 4, 5]]),
#      array([[0, 1, 2, 3, 4, 5]])]

np.split(b, 3, 0) # 目标数组为2维,同函数hsplit(b, 3)
#输出:[array([[0, 1], [0, 1], [0, 1]]),
#      array([[2, 3], [2, 3], [2, 3]]),
#      array([[4, 5], [4, 5], [4, 5]])]

2. 按区段[a, b, c]拆分(将数组拆分为[ :a] [a:b] [b:c] [c:]的若干数组)

python 复制代码
a = np.array([ 7,  6,  1,  5, 17,  3,  8, 18])
np.split(a, indices_or_sections=[3, 5, 8])
#输出:[array([7, 6, 1]), array([ 5, 17]), array([ 3,  8, 18]), array([], dtype=int64)]

b = np.array([[0,1,2],[0,1,2],[0,1,2],[0,1,2]])
np.split(b, [1,3], axis = 0) #同函数vsplit(b, [1,3])
#输出:[array([[0, 1, 2]]), array([[0, 1, 2],[0, 1, 2]]), array([[0, 1, 2]])]

np.split(b, [1,3], 1) #同函数hsplit(b, [1,3])
#输出:[array([[0],[0],[0],[0]]),
#      array([[1, 2],[1, 2],[1, 2],[1, 2]]),
#      array([], shape=(4, 0), dtype=int64)]

二、数组的聚合运算

(一)单一维度聚合运算
1. 求和运算(sum(目标数组 [,求和位置])

python 复制代码
a = np.arange(7)
np.sum(a) # 等效a.sum(),计算所有元素的和。输出21

#计算指定位置的数值和,以下输出3
np.sum(a, where=[True, True, True, False, False, False, False])

#计算条件表达式为真的数值和,以下计算数组中偶数和,输出12
np.sum(a, where=a%2==0)

2. 查找最小值(min(目标数组 [,位置]))、最大值(max(目标数组 [,位置]))

python 复制代码
b = np.array([6, 11, 10, 21, 10])
np.min(b) #等效b.min(),输出 6
np.max(b) #等效b.max(), 输出 21

3. 求均值(mean(目标数组 [,位置]))

python 复制代码
b = np.array([6, 11, 10, 21, 10])
np.mean(b) #等效b.mean(),输出 11.6

4. 百分位数(percentile(a目标数组, q=百分位值)

python 复制代码
a = np.array([49, 48, 18, 39, 34, 14, 35, 41, 43, 40])
np.percentile(a,q=75) #输出42.5

(二)多维度聚合运算
1. 求和(sum(目标数组 [, 求和位置, 轴向(axis=0纵向 | 1横向 | None按1维方式默认)]))

python 复制代码
a = np.arange(8).reshape(2,4)
#a结构:array([[0, 1, 2, 3],
#             [4, 5, 6, 7]])
np.sum(a, axis=0) # 纵向数值相加,返回1维数组,元素个数与原数组列数相同
#输出:array([4.,  6.,  8., 10.])

np.sum(a, axis=1, dtype=int) # 橫向数值相加,返回1维数组,元素个数与原数组行数相同
#输出:array([6, 22])

np.sum(a, axis=None) #所有元素值相加,返回一个值
#输出:28

2. 返回最小值(min)、最大值(max)

python 复制代码
a = np.arange(8).reshape(2,4)
np.min(a,axis=0) # 输出:array([0, 1, 2, 3])
np.max(a,axis=1) # 输出:array([3, 7])

3. 求均值(mean(目标数组 [, 轴向]))

python 复制代码
a = np.arange(16).reshape(4,4)
'''a结构:
array([[10, 11, 12, 13],
       [14, 15, 16, 17]])'''
       
a.mean(axis=0) 
#输出:array([6., 7., 8., 9.])

a.mean(axis=1)
#输出:array([11.5, 15.5])

np.mean(a,axis=None)
#输出:13.5

4. 求百分位数(percentile(目标数组, q=百分位值 [,axis=0纵向 | 1横向 | None按1维方式默认)

python 复制代码
a = np.array([49, 48, 18, 39, 34, 14, 35, 41, 43, 40]).reshape(2,5)
'''a的结构:
array([[49, 48, 18, 39, 34],
       [14, 35, 41, 43, 40]])'''
       
np.percentile(a,q=75) #输出:42.5

np.percentile(a,q=50,axis=0)
#输出:array([31.5, 41.5, 29.5, 41. , 37. ])

np.percentile(a,q=50,axis=1)
#输出:array([39., 40.])

三、其他操作

1. 返回最小值、最大值索引号(argmin(目标数组 [, axis=0纵向 | 1横向 | None视为1维数组默认))

argmax(参数同argmin)

python 复制代码
a = np.arange(6).reshape(2,3) + 10
'''a结构:
array([[10, 11, 12],
       [13, 14, 15]])'''
       
np.argmax(a) #输出 5

np.argmin(a,axis=0)
#输出:array([0, 0, 0])

np.argmax(a,axis=1)
#输出:array([2, 2])

2. 打乱数组排序(np.random.shuffle(目标数组))注:目标数组会变

python 复制代码
a = np.arange(5)+15
#a结构:array([15, 16, 17, 18, 19])

np.random.shuffle(a)
#a元素顺序随机更改:array([18, 15, 16, 19, 17])

3. 数组排序(sort(目标数组 [, axis=0纵向 | 1横向默认 | None视为1维排)

python 复制代码
a = np.array([[1,6,4],[5,3,7]])
'''a结构:
array([[1, 6, 4],
       [5, 3, 7]])'''
np.sort(a, axis=0) 
#输出:array([[1, 3, 4],
#            [5, 6, 7]])

np.sort(a) #同np.sort(a, axis=1)
#输出:array([[1, 4, 6],
#            [3, 5, 7]])

np.sort(a, axis=None)
#输出:array([1, 3, 4, 5, 6, 7])
相关推荐
封步宇AIGC25 分钟前
量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
人工智能·python·机器学习·数据挖掘
何曾参静谧26 分钟前
「Py」Python基础篇 之 Python都可以做哪些自动化?
开发语言·python·自动化
Prejudices30 分钟前
C++如何调用Python脚本
开发语言·c++·python
我狠狠地刷刷刷刷刷43 分钟前
中文分词模拟器
开发语言·python·算法
Jam-Young1 小时前
Python的装饰器
开发语言·python
Mr.咕咕1 小时前
Django 搭建数据管理web——商品管理
前端·python·django
AnFany2 小时前
LeetCode【0028】找出字符串中第一个匹配项的下标
python·算法·leetcode·字符串·kmp·字符串匹配
爪哇学长2 小时前
Java API类与接口:日期类型与集合的使用
java·开发语言·python
封步宇AIGC2 小时前
量化交易系统开发-实时行情自动化交易-3.4.1.6.A股宏观经济数据
人工智能·python·机器学习·数据挖掘