numpy模块

numpy模块导入时,注意需要设置别名为 np

一维数组

只有一行,相当于一条线

  1. # 生成一个一维数组
  2. import numpy as np
  3. lis = [x for x in range(10)]
  4. arr1 = np.array(lis)
  5. print(arr1,type(arr1)) #打印结果 [0 1 2 3 4 5 6 7 8 9] <class 'numpy.ndarray'>

二维数组

有行有列,是numpy模块处理最多的数据类型.

三维数组就是在一个大中括号中有多个二位数组

一个列表里面装了多个一维数组.

  1. # 生成一个二维数组
  2. import numpy as np
  3. lis1 = [1,2,3]
  4. lis2 = [4,5,6]
  5. arr1 = np.array([lis1,lis2])
  6. print(arr1) # 打印出了一个二维数组
  7. #[[1 2 3]
  8. [4 5 6]]

np.array() 括号内需传入一个类似数组的排序对象

列表list和numpy的区别

列表就是对一维数组进行操作,而numpy是对多维数组进行操作

获取多维数组的行和列

  1. import numpy as np
  2. arr = np.array([[1, 2, 3], [4, 5, 6]])
  3. print(arr.shape) # 返回的是一个元组(2, 3),表示这个二维数组的行数和列数
  4. print(arr.shape[0])#
  5. print(arr.shape[1])#

多维数组的索引

  • 中括号加锁定,中间用逗号隔开
  1. import numpy as np
  2. arr = np.array([[1,2,3],[4,5,6]])
  3. # 比如说我想取arr中的第1行第2列
  4. print(arr[0,1])
  5. # 我想取 第一行所有的数
  6. print(arr[0,:])
  7. # 我想取 第一列所有的数
  8. print(arr[:,0])
  9. # 我想取 第一行,第二列的第2个和第3个元素
  10. print(arr[0,[1,2]])

高级功能

筛选数据

给定一个多维数组,我想取其中年龄大于60的数

  1. import numpy as np
  2. import random
  3. arr = np.array([[random.randint(30, 80) for x in range(5)], [random.randint(30, 80) for x in range(5)], \
  4. [random.randint(30, 80) for x in range(5)]])
  5. print(arr > 60)
  6. print(arr[arr > 60])
  7. #[[False False False True True]
  8. [ True False False True False]
  9. [ True False False False False]]
  10. #[65 66 75 64 61]

多维数组元素的替换

例如将上面的大于60岁的年龄全部替换成0岁

  1. import numpy as np
  2. import random
  3. arr = np.array([[random.randint(30, 80) for x in range(5)], [random.randint(30, 80) for x in range(5)], \
  4. [random.randint(30, 80) for x in range(5)]])
  5. print(arr > 60)
  6. print(arr[arr > 60])
  7. arr[arr>60]=0
  8. print(arr)
  9. #[[False False True False False]
  10. [False True True False False]
  11. [False True False True False]]
  12. # [66 72 72 61 64]
  13. [[58 52 0 51 60]
  14. [32 0 0 60 56]
  15. [37 0 60 0 40]]

或者将指定行指定列的元素进行替换

  1. import numpy as np
  2. arr = np.array([[1,2,3],[4,5,6]])
  3. arr[1,2] = 10
  4. print(arr)
  5. #[[ 1 2 3]
  6. [ 4 5 10]] # 6被替换成10

多维数组的合并

既然是合并,至少需要两个多维数组

  1. import numpy as np
  2. arr1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
  3. arr2 = np.array([[9, 10, 11, 12], [13, 14, 15, 16]])
  4. print(f'arr1:{arr1}')
  5. print(f'arr2:{arr2}')
  6. # 垂直合并
  7. print(np.vstack((arr1, arr2)))
  8. # 水平合并
  9. print(np.hstack((arr1, arr2)))
  10. # 默认垂直合并axis=0,
  11. # axis=1 水平合并
  12. print(np.concatenate((arr1,arr2),axis=0))
  13. print(np.concatenate((arr1,arr2),axis=1))
  14. # 打印结果
  15. arr1:[[1 2 3 4]
  16. [5 6 7 8]]
  17. arr2:[[ 9 10 11 12]
  18. [13 14 15 16]]
  19. [[ 1 2 3 4]
  20. [ 5 6 7 8]
  21. [ 9 10 11 12]
  22. [13 14 15 16]]
  23. [[ 1 2 3 4 9 10 11 12]
  24. [ 5 6 7 8 13 14 15 16]]
  25. [[ 1 2 3 4]
  26. [ 5 6 7 8]
  27. [ 9 10 11 12]
  28. [13 14 15 16]]
  29. [[ 1 2 3 4 9 10 11 12]
  30. [ 5 6 7 8 13 14 15 16]]

在numpy中为了统一做处理,只要有axis=0的就是列,axis=1的就是行

通过函数方法创建多维数组

  1. import numpy as np
  2. # arange 创建一维数组
  3. print(np.arange(10)) #1-10,不含10
  4. print(np.arange(1,10,2)) # 开始,结束,步长
  5. # 打印结果
  6. [0 1 2 3 4 5 6 7 8 9]
  7. [1 3 5 7 9]
  8. # ones 打印出的都是1
  9. print(np.ones((3,4))) # 需要传一个元组,设置行和列
  10. # 打印结果
  11. [[1. 1. 1. 1.]
  12. [1. 1. 1. 1.]
  13. [1. 1. 1. 1.]]
  14. # zeros 打印出的都是0
  15. print(np.zeros((3,4))) # 需要传一个元祖,设置行和列
  16. # 打印结果
  17. [[0. 0. 0. 0.]
  18. [0. 0. 0. 0.]
  19. [0. 0. 0. 0.]]
  20. # eye
  21. print(np.eye(5,5))
  22. # 打印结果
  23. [[1. 0. 0. 0. 0.]
  24. [0. 1. 0. 0. 0.]
  25. [0. 0. 1. 0. 0.]
  26. [0. 0. 0. 1. 0.]
  27. [0. 0. 0. 0. 1.]]

矩阵的运算

  1. # 多维数组之间可以进行运算
  2. # + - * / % **
  3. import numpy as np
  4. arr1 = np.arange(1,10)
  5. arr2 = np.arange(11,20)
  6. print(arr1) # 矩阵arr1
  7. # [1 2 3 4 5 6 7 8 9]
  8. print(arr2) # 矩阵arr2
  9. # [11 12 13 14 15 16 17 18 19]
  10. print(arr1+arr2) # 两个矩阵对应位置的元素相加
  11. # [12 14 16 18 20 22 24 26 28]
  12. print(arr1-arr2) # 两个矩阵对应位置的元素相减
  13. # [-10 -10 -10 -10 -10 -10 -10 -10 -10]
  14. print(arr1*arr2) # 两个矩阵对应位置的元素相乘
  15. # [ 11 24 39 56 75 96 119 144 171]
  16. print( arr2/arr1) # 两个矩阵对应位置的元素相除
  17. # [11. 6. 4.33333333 3.5 3. 2.66666667
  18. # 2.42857143 2.25 2.11111111]
  19. print(arr2%arr1) # 对应位置取余
  20. # [0 0 1 2 0 4 3 2 1]
  21. print(arr1**2) # 单个矩阵每个元素都取2次方
  22. # [ 1 4 9 16 25 36 49 64 81]

求最大值最小值

  1. import numpy as np
  2. # 求最大值
  3. arr = np.array([[1, 4, 6, 7], [9, 5, 7, 8]])
  4. print(arr.max())
  5. # 求最小值
  6. print(arr.min())

numpy生成随机数

  1. import numpy as np
  2. # 生成3行4列0到1之间的随机小数
  3. print(np.random.rand(3,4))
  1. import numpy as np
  2. np.random.seed(1)# 永不随机,固定的数
  3. print(np.random.rand(3,4))
  4. rs = np.random.RandomState(1) # 永不随机,固定的数
  5. rs.rand(3, 4)

pandas模块

pandas模块有什么用

支持文件存取操作

Series(了解)

类似于一维数组,只能放一维数组

  1. import pandas as pd
  2. import numpy as np
  3. print(pd.Series(np.arange(10)))
  4. # 打印结果
  5. 0 0
  6. 1 1
  7. 2 2
  8. 3 3
  9. 4 4
  10. 5 5
  11. 6 6
  12. 7 7
  13. 8 8
  14. 9 9
  15. dtype: int64

二维以上的数组使用DataFrame

DataFrame(掌握)

  1. import pandas as pd
  2. import numpy as np
  3. print(pd.DataFrame(np.array([[1, 2, 3, 4], [1, 2, 3, 4]])))
  4. # 打印结果
  5. 0 1 2 3
  6. 0 1 2 3 4
  7. 1 1 2 3 4
  1. # 时间范围
  2. dates = pd.date_range('2019-02',periods=7) # 默认从1月1日开始,
  3. print(dates)
  4. # 打印结果
  5. DatetimeIndex(['2019-02-01', '2019-02-02', '2019-02-03', '2019-02-04',
  6. '2019-02-05', '2019-02-06', '2019-02-07'],
  7. dtype='datetime64[ns]', freq='D')
  1. import pandas as pd
  2. import numpy as np
  3. dates = pd.date_range('2018-02', periods=7) # 日期
  4. # print(dates)
  5. goods_list = ['tesla', 'transformer', 'chognqiwawa', 'masaladi'] # 商品列表
  6. price = np.random.rand(7, 4) # 随机商品价格,7行4列
  7. # print(price)
  8. df = pd.DataFrame(price, index=dates, columns=goods_list) # 约定俗成,习惯用 df
  9. print(df)
  10. # tesla transformer chognqiwawa masaladi
  11. 2018-02-01 0.993845 0.124944 0.534339 0.436508
  12. 2018-02-02 0.948098 0.921375 0.931371 0.288497
  13. 2018-02-03 0.965210 0.074648 0.108268 0.198268
  14. 2018-02-04 0.709131 0.207583 0.414028 0.520331
  15. 2018-02-05 0.146407 0.025101 0.399028 0.916314
  16. 2018-02-06 0.884905 0.319202 0.448119 0.721902
  17. 2018-02-07 0.549198 0.324437 0.872872 0.311014

df的相关方法及属性

  1. # dtype 查看数据类型
  2. # index 查看行序列或者索引
  3. # columns 查看各列的标签
  4. # values 查看数据框内的数据,也即不含表头索引的数据
  5. # describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
  6. # transpose 转置,也可用T来操作
  7. # sort_index 排序,可按行或列index排序输出
  8. # sort_values 按值排序,可以具体选择某一个标签
  1. print(df.dtype) # 打印每一行的数据类型
  2. print(df.index) # 打印所有的行的索引
  3. print(df.columns) # 打印所有的列的标签
  4. print(df.values) # 打印数据框内的数据,不含表头和索引的数据
  5. print(df.sort_values(by=['tesla'], ascending=False)) # 按照标签'tesla'进行排序,可以控制升序或者降序

处理缺失值

  1. test_data = '''
  2. 5.1,,1.4,0.2
  3. 4.9,3.0,1.4,0.2
  4. 4.7,3.2,,0.2
  5. 7.0,3.2,4.7,1.4
  6. 6.4,3.2,4.5,1.5
  7. 6.9,3.1,4.9,
  8. ,,,
  9. '''
  10. 这个矩阵中缺失了一部分数据
  11. import pandas as pd
  12. from io import StringIO
  13. test_data = StringIO(test_data) # 把test_data读入内存
  14. df = pd.read_csv(test_data) # 从csv中读取test_data数据
  15. print(df)
  16. df2 = df.dropna(thresh=4, axis=1) # 0是行,1是列 thresh 表示存在正常数据的个数
  17. print(df2)
  18. df3 = df.dropna(thresh=1, axis=0) # 0是行,1是列
  19. print(df3)
  20. # df4 = df.dropna(subset['c2']) #
  21. # print(df4)
  22. df5 = df.fillna(value=33) # 缺失的值会被value值替换填充
  23. print(df5)

合并数据

  1. import pandas as pd
  2. import numpy as np
  3. df2 = pd.DataFrame(np.zeros((3, 4)))
  4. df3 = pd.DataFrame(np.ones((3, 4)))
  5. df4 = pd.concat((df2,df3),axis=0) # 默认是垂直合并
  6. df5 = pd.concat((df2,df3),axis=1) # 改为1后是水平合并
  7. print(df4,df5)

matplotlib模块

matplotlib模块有什么用?

图形可视化,主要用来画图

  1. import matplotlib.pyplot as plt
  2. # 只识别英语,所以通过以下两行增加中文字体
  3. from matplotlib.font_manager import FontProperties
  4. # %matplotlib inline # jupyter默认不显示图片,通过这一行告诉他显示图片
  5. font = FontProperties(fname='D:\msyh.ttc')
  6. classes = ['1班', '2班', '3班', '4班']
  7. student_amounts = [30, 20, 30, 40]
  8. classes_index = range(len(classes)) # [0,1,2,3]
  9. # [0,1,2,3] [30,20,30,40]
  10. plt.bar(classes_index, student_amounts)
  11. plt.xticks(classes_index, classes, FontProperties=font)
  12. plt.text(0, 32, '30')
  13. plt.xlabel('班级', FontProperties=font)
  14. plt.ylabel('学生人数', FontProperties=font)
  15. plt.title('班级-学生人数', FontProperties=font)
  16. plt.style.use('ggplot')
  17. plt.plot()
  18. plt.show()

11-2 numpy/pandas/matplotlib模块的更多相关文章

  1. numpy+pandas+ matplotlib模块(day18)

    目录 numpy模块 二维数组 numpy数组的属性 T 数组的装置 dtype 数组元素的数据类型 size 数组元素的个数 ndim 数组的维数 shape数组的维度大小 astype 类型转换 ...

  2. python 数据分析工具之 numpy pandas matplotlib

    作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...

  3. 第一章:AI人工智能 の 数据预处理编程实战 Numpy, Pandas, Matplotlib, Scikit-Learn

    本课主题 数据中 Independent 变量和 Dependent 变量 Python 数据预处理的三大神器:Numpy.Pandas.Matplotlib Scikit-Learn 的机器学习实战 ...

  4. 常用统计分析python包开源学习代码 numpy pandas matplotlib

    常用统计分析python包开源学习代码 numpy pandas matplotlib 待办 https://github.com/zmzhouXJTU/Python-Data-Analysis

  5. Python模块简介及安装 [numpy,pandas,matplotlib,scipy,statsmodels,Gensim,sklearn,keras]

    https://pan.baidu.com/s/1bpVv3Ef  67bd          模块安装文件下载地址 pip install "numpy-1.12.0b+mkl-cp35- ...

  6. numpy, pandas, matplotlib等常用库的学习手册

    pandas介绍: 待续 参考资料: 中文:https://www.cnblogs.com/skying555/p/5914391.html 英文:http://www.datadependence. ...

  7. Ipython自动导入Numpy,pandas等模块

    一.引言 最近在学习numpy,书上要求安装一个Ipythpn,可以自动导入Numpy,pandas等数据分析的模块,可是当我安装后,并不能自动导入numpy模块,还需要自己import.我就去查了一 ...

  8. numpy+pandas+matplotlib+tushare股票分析

    一.数据导入 安装tushare模块包 pip install tushare http://tushare.org/ tushare是一个财经数据接口包 import numpy as np imp ...

  9. numpy pandas matplotlib

    import numpy as np import pandas as pd import matplotlib.pyplot as plt ---------------numpy--------- ...

随机推荐

  1. gevent 协程 使用

    Python通过yield提供了对协程的基本支持,但是不完全.而第三方的gevent为Python提供了比较完善的协程支持. gevent是第三方库,通过greenlet实现协程,其基本思想是: 当一 ...

  2. python中coding:utf-8和setdefaultencoding区别

    这两个作用不一样, 1. # coding:utf-8 作用是定义源代码的编码. 如果没有定义, 此源码中是不可以包含中文字符串的.PEP 0263 -- Defining Python Source ...

  3. zoj3777(状态压缩)

    题目阐述: 给定n个座位,n个人,每个人可以做n个位置中的任意一个,P[i][j]代表第i个人做第j个位置获得的分数,求有多少种排列方式使得获得的分数大于等于M. 这道题跟数位dp的思想很像,都是穷举 ...

  4. hdu 1480

    钥匙计数之二 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  5. UI:SQL语句

    sql语句一般不区分大小写,但是我们默认的是关键字要大写是一种好的习惯,比如SELECT 等效于 select.,但是表中的字段,属性区分大小写.Oracle 数据库是一种区分大小写的. Sql语句命 ...

  6. 关于eclipse部署项目后,在tomcat中的webapps文件夹下没有项目

    转自:https://blog.csdn.net/yang505581644/article/details/78802316 一.发现问题 在eclipse中新建Dynamic Web Projec ...

  7. JS计算字符串实际长度

    http://www.qttc.net/201207136.html // UTF8字符集实际长度计算 function getStrLeng(str){ var realLength = 0; va ...

  8. influxdb数据库增加身份认证(windows)三

    接上一节,增加数据库身份认证 1.修改Config配置文件auth-enabled为true 2.然后重新载入最新的config配置文件打开数据库 3.验证身份认证功能是否已打开 说明身份认证功能已打 ...

  9. 配置Ubuntu16.04第03步:安装搜狗输入法

    1.进入搜狗官网:https://pinyin.sogou.com/linux/ ,下载搜狗输入法安装包 2.使用dpkg命令安装Deb包: sudo dpkg -i sogoupinyin_2.0. ...

  10. Ubuntu Server 上安装pip后pip命令报错的解决办法

    Installation Do I need to install pip? pip is already installed if you are using Python 2 >=2.7.9 ...