NumPy

NumPy = Numeric Python
数值运算、矩阵运算……

  • 运算逻辑基于矩阵演算,代码相对简洁
  • 底层大量采用C语言实现,执行速度快

matplotlib、pandas、TuShare等都用到了NumPy模块。

ndarray类型

一维数组

ndarray = N-dimensional array,N维数组,和Python中的列表相似。

  1. 使用array()将列表等容器转换为ndarray类型的数组
    (range等可迭代对象都可以转换为ndarray)
  2. 将 ndarray数据看作矩阵,可以进行整体的数学运算
  3. 使用tolist方法将ndarray转换为普通的python列表
  4. 使用numpy模块提供的各种函数对数组统计运算
    math模块要求参数必须是数字,不能是容器;而numpy模块提供的各种函数可以对数组统计运算
  1. import numpy as np
  2. x = [15, 20, 16, 8, 6, 15, 12, 20, 3, 5, 8, 10] # 列表类型
  3. a = np.array(x)
  4. a # ndarray类型
  1. array([15, 20, 16, 8, 6, 15, 12, 20, 3, 5, 8, 10])
  1. b = a * 3
  2. b
  1. array([45, 60, 48, 24, 18, 45, 36, 60, 9, 15, 24, 30])

如果a是Python列表对象,那么a*3就是把a重复3次

  1. c = np.array(range(12))
  2. c
  1. array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
  1. d = b - c
  2. d
  1. array([45, 59, 46, 21, 14, 40, 30, 53, 1, 6, 14, 19])
  1. 各月收入 = [3000,2500,2800,4400]
  2. 各月支出 = [2700,3200,2100,4300]
  3. 各月盈余 = np.array(各月收入) - np.array(各月支出)
  4. 各月盈余 = 各月盈余.tolist()
  5. 各月盈余
  1. [300, -700, 700, 100]

二维数组

  1. 使用reshape将一维结构ndarray转换为二维结构
  2. numpy的计算规则和函数同样适用于二维数组(但具体使用时要指定行列轴)
  3. a.T可以生成a的转置矩阵
  1. x = [15, 20, 16, 8, 6, 15, 12, 20, 3, 5, 8, 10]
  2. a = np.array(x)
  3. b = a.reshape(4, 3)
  4. b
  1. array([[15, 20, 16],
  2. [ 8, 6, 15],
  3. [12, 20, 3],
  4. [ 5, 8, 10]])
  1. c = b.reshape(2, 6)
  2. c
  1. array([[15, 20, 16, 8, 6, 15],
  2. [12, 20, 3, 5, 8, 10]])
  1. c.T
  1. array([[15, 12],
  2. [20, 20],
  3. [16, 3],
  4. [ 8, 5],
  5. [ 6, 8],
  6. [15, 10]])

使用NumPy处理Excel数据

image.png

  1. import numpy as np
  2. import xlwings as xw
  3. app = xw.App()
  4. wb = app.books.open('一季度工资.xlsx')
  5. 工资 = np.array(wb.sheets['计件工资'].range('c5:e8').value)
  6. 奖金 = np.array(wb.sheets['出勤奖励'].range('e4:e15').value).reshape(4, 3)
  7. 实发 = 工资 + 奖金
  8. wb.sheets['实发工资'].range('c4:f6').value = 实发.T # xlwings支持ndarray
  9. wb.save('一季度工资.xlsx')
  10. wb.close()
  11. app.quit()

pandas

pandas = Panel Data
统计运算、数据导入、数据清洗、合并分组、索引定位、筛选切片…..

pandas数据类型

一维Series 和 二维DataFrame

dataframe.iloc[首行:尾行, 首列:尾列]

pandas读写Excel基本方法

  1. read_excel (文件名, 工作表名)
    pandas的Excel读写使用了 xlrdopenpyxl 第三方模块,需要先安装才能使用。
  2. **to_excel** (文件名, 工作表名)会覆盖原Excel文件!所以不要用 **to_excel** (文件名, 工作表名)向已经存在的工作簿中写入数据! ```python import pandas as pd 工资 = pd.read_excel(‘一季度工资.xlsx’, ‘计件工资’) 工资数据 = 工资.iloc[4:, 3:] 奖金 = pd.read_excel(‘一季度工资.xlsx’, ‘出勤奖励’) 奖金数据 = 奖金.iloc[3:, 4] # 一维数据,Series类型,无法直接和dataframe类型进行运算 奖金数据 = 奖金数据.values.reshape(4, 3) # .values得到一维数组

实发工资 = 工资数据 + 奖金数据 实发工资 = 实发工资.T

实发工资.to_excel(‘实发工资.xlsx’, ‘实发工资’) ```

NumPy和pandas基本统计功能

image.pngimage.png