python-数据分析-(5)numpy常用操作

numpy常用操作

1、 unique: 去重

(1)一维数组去重:直接将一维数组中的元素进行去重

arr = np.array([2,3,4,3,2,2,3,4,2,2,3,4])
[2 3 4 3 2 2 3 4 2 2 3 4]
print(np.unique(arr))
[2 3 4]

(2)二维数组去重:

  1. 默认,unique(arr),axis = None,会将所有的元素先转化为一维数组,再进行去重
  2. axis = 0/1, 整行或者整列进行排序,将行(列)中重复的元素去重,返回每行(列)去重后的数组
  3. 横向:将每行中元素重复的剔除
  4. 纵向:将每列中元素全部相同的剔除
arr1 = np.array([[1,1,1,1], [1,1,1,1],[1,1,1,1],[1,1,1,1]])
print(arr1)
print('--------------------------')
print(np.unique(arr1, axis=0))
print(np.unique(arr1, axis=1))
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
--------------------------
[[1 1 1 1]]
[[1]
 [1]
 [1]
 [1]]

2、 文件操作

1. 二进制文件

.npy .npz,必须通过numpy来操作的文件
(1)load :读取二进制文件
.npy文件 # 直接进行读取

# b 读取二进制文件
print(np.load('arr.npy'))
[0.04397625 0.94789624 0.46150546 ... 0.85790328 0.39237683 0.77939274]  # 直接进行读取

.npz文件 # 直接读取的是对象,需要进行list查看所有文件,再进行指定读取的文件

# list 查看file下的npy文件, arr_0.npy, arr_1.npy
data = np.load('arrz.npz', allow_pickle=True)
print(data)            # <numpy.lib.npyio.NpzFile object at 0x000000000BE38DC8>
print(list(data))      # ['arr_0', 'arr_1', 'arr_2']
print(data['arr_2'])
[[6.15907619e-01 5.93048582e-01 8.36780430e-01 9.80096328e-01
  9.22749156e-01 1.17418170e-01 2.85189358e-01 4.39288358e-01
  7.16461630e-01 9.84378165e-01 7.32501462e-01 7.44045292e-01
  8.02260122e-01 2.26461822e-01 5.66273204e-01 3.80147492e-01
  7.07930411e-01 2.36272831e-01 7.37709192e-01 3.69642573e-01]]

(2)save:将程序中的文件保存成二进制格式,只能保存一个数组

arr = np.array([2,3,4,3,2,2,3,4,2,2,3,4])
np.save('arr', arr2)   # 保存
# b 读取二进制文件
print(np.load('arr.npy'))

(3)savez:将程序中的文件保存成二进制格式,可以保存多个数组

arr1 = np.array([2,3,4,3,2,2,3,4,2,2,3,4])
arr2 = np.array([2,3,4,3,2,2,3,4,2,2,3,4])
arr3 = np.array([2,3,4,3,2,2,3,4,2,2,3,4])
np.savez('arrz', arr1, arr2, arr3)  # 保存多个数组
2. 文本文件

(1)savetext:保存为文本文件,fmt:保存的类型,delimiter:分割符

#  默认存储的数据为float类型
arr1 = np.array([2,3,4,3,2,2,3,4,2,2,3,4])
np.savetxt('arrtext',arr1,fmt='%d', delimiter=' ')

(2)loadtext:读取文本文件

# delimiter 使用什么进行分割读取, dtype读取的类型
arr4 = np.loadtxt('arrtext', delimiter=' ', dtype=int)
print(np.loadtxt('arrtext', delimiter=':', dtype=str))  # 使用错误的读取方式,会将数据已一维数组的方式全部读取
print(arr4.dtype)
['1 1 1 1' '1 1 1 1' '1 1 1 1' '1 1 1 1']
int32

3、统计分布方法

(1) 最小值、最大值

print(arr1)
[[ 2  1  3  5]
 [ 1  2 12 32]
 [11  3  6  2]
 [11  6  2 13]]
# 最小值  min
print('=================================')
print(arr1.min())
print(arr1.min(axis=1))  # axis=1   获取行的最小值
print('=============')
print(arr1.min(axis=0))  # axis=0   获取列的最小值
=================================
1
[1 1 2 2]
=============
[1 1 2 2]
# 最大值  max
print(arr1.max())
print(arr1.max(axis=0))  # axis=0   获取列的最大值
32
[11  6 12 32]

(2) 最大值索引 最小值索引
首先将数组进行一维排列, 拿出最大(小)数的索引,从0开始

print(arr1.argmax())    # argmax() 11
print(arr1.argmin())    # argmin() 0
# axis=1/0, 依次求出每一行(列)中的最大(小)的值的索引位置,不进行平铺
print(arr1.argmax(axis=1))
7
1
[3 3 0 3]

(3)标准差 方差
标准差和方差,可以反映数据的分布:
当标准差于方差越大,表示数据越分散
当标准差于方差越小,数据越集中

 - std : 标准差

print('标准差:\n', arr1.std(axis=1))
 - var: 方差

print('方差差:\n', arr1.var(axis=1))

(4)求和 平均值

print(arr1.sum())  # 全部求和
print(arr1.sum(axis=1))  # 按行求和
print(arr1.sum(axis=0))  # 按列求和
112
[11 47 22 32]
[25 12 23 52]
# 平均值
print(arr1.mean())
print(arr1.mean(axis=1))  # 按行求平均值
print(arr1.mean(axis=0))  # 按列求平均
7.0
[ 2.75 11.75  5.5   8.  ]
[ 6.25  3.    5.75 13.  ]

(5)累计求和

# 累计求和
print(arr1.cumsum())
print(arr1.cumsum(axis=1))
[  2   3   6  11  12  14  26  58  69  72  78  80  91  97  99 112]
[[ 2  3  6 11]
 [ 1  3 15 47]
 [11 14 20 22]
 [11 17 19 32]]

(6)累计求积

# 累计求积
print(arr1.cumprod())
print(arr1.cumprod(axis=1))
[          2           2           6          30          30          60
         720       23040      253440      760320     4561920     9123840
   100362240   602173440  1204346880 -1523359744]
[[   2    2    6   30]
 [   1    2   24  768]
 [  11   33  198  396]
 [  11   66  132 1716]]
上一篇:Python中的numpy模块简述


下一篇:php导出数据到excel,防止身份证等数字字符格式变成科学计数的方法