11-2 numpy/pandas/matplotlib模块
numpy模块
numpy模块导入时,注意需要设置别名为 np
一维数组
只有一行,相当于一条线
# 生成一个一维数组
import numpy as np
lis = [x for x in range(10)]
arr1 = np.array(lis)
print(arr1,type(arr1)) #打印结果 [0 1 2 3 4 5 6 7 8 9] <class 'numpy.ndarray'>
二维数组
有行有列,是numpy模块处理最多的数据类型.
三维数组就是在一个大中括号中有多个二位数组
一个列表里面装了多个一维数组.
# 生成一个二维数组
import numpy as np
lis1 = [1,2,3]
lis2 = [4,5,6]
arr1 = np.array([lis1,lis2])
print(arr1) # 打印出了一个二维数组
#[[1 2 3]
[4 5 6]]
np.array() 括号内需传入一个类似数组的排序对象
列表list和numpy的区别
列表就是对一维数组进行操作,而numpy是对多维数组进行操作
获取多维数组的行和列
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # 返回的是一个元组(2, 3),表示这个二维数组的行数和列数
print(arr.shape[0])# 行
print(arr.shape[1])# 列
多维数组的索引
- 中括号加锁定,中间用逗号隔开
import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
# 比如说我想取arr中的第1行第2列
print(arr[0,1])
# 我想取 第一行所有的数
print(arr[0,:])
# 我想取 第一列所有的数
print(arr[:,0])
# 我想取 第一行,第二列的第2个和第3个元素
print(arr[0,[1,2]])
高级功能
筛选数据
给定一个多维数组,我想取其中年龄大于60的数
import numpy as np
import random
arr = np.array([[random.randint(30, 80) for x in range(5)], [random.randint(30, 80) for x in range(5)], \
[random.randint(30, 80) for x in range(5)]])
print(arr > 60)
print(arr[arr > 60])
#[[False False False True True]
[ True False False True False]
[ True False False False False]]
#[65 66 75 64 61]
多维数组元素的替换
例如将上面的大于60岁的年龄全部替换成0岁
import numpy as np
import random
arr = np.array([[random.randint(30, 80) for x in range(5)], [random.randint(30, 80) for x in range(5)], \
[random.randint(30, 80) for x in range(5)]])
print(arr > 60)
print(arr[arr > 60])
arr[arr>60]=0
print(arr)
#[[False False True False False]
[False True True False False]
[False True False True False]]
# [66 72 72 61 64]
[[58 52 0 51 60]
[32 0 0 60 56]
[37 0 60 0 40]]
或者将指定行指定列的元素进行替换
import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
arr[1,2] = 10
print(arr)
#[[ 1 2 3]
[ 4 5 10]] # 6被替换成10
多维数组的合并
既然是合并,至少需要两个多维数组
import numpy as np
arr1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
arr2 = np.array([[9, 10, 11, 12], [13, 14, 15, 16]])
print(f'arr1:{arr1}')
print(f'arr2:{arr2}')
# 垂直合并
print(np.vstack((arr1, arr2)))
# 水平合并
print(np.hstack((arr1, arr2)))
# 默认垂直合并axis=0,
# axis=1 水平合并
print(np.concatenate((arr1,arr2),axis=0))
print(np.concatenate((arr1,arr2),axis=1))
# 打印结果
arr1:[[1 2 3 4]
[5 6 7 8]]
arr2:[[ 9 10 11 12]
[13 14 15 16]]
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
[[ 1 2 3 4 9 10 11 12]
[ 5 6 7 8 13 14 15 16]]
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
[[ 1 2 3 4 9 10 11 12]
[ 5 6 7 8 13 14 15 16]]
在numpy中为了统一做处理,只要有axis=0的就是列,axis=1的就是行
通过函数方法创建多维数组
import numpy as np
# arange 创建一维数组
print(np.arange(10)) #1-10,不含10
print(np.arange(1,10,2)) # 开始,结束,步长
# 打印结果
[0 1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]
# ones 打印出的都是1
print(np.ones((3,4))) # 需要传一个元组,设置行和列
# 打印结果
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
# zeros 打印出的都是0
print(np.zeros((3,4))) # 需要传一个元祖,设置行和列
# 打印结果
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
# eye
print(np.eye(5,5))
# 打印结果
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
矩阵的运算
# 多维数组之间可以进行运算
# + - * / % **
import numpy as np
arr1 = np.arange(1,10)
arr2 = np.arange(11,20)
print(arr1) # 矩阵arr1
# [1 2 3 4 5 6 7 8 9]
print(arr2) # 矩阵arr2
# [11 12 13 14 15 16 17 18 19]
print(arr1+arr2) # 两个矩阵对应位置的元素相加
# [12 14 16 18 20 22 24 26 28]
print(arr1-arr2) # 两个矩阵对应位置的元素相减
# [-10 -10 -10 -10 -10 -10 -10 -10 -10]
print(arr1*arr2) # 两个矩阵对应位置的元素相乘
# [ 11 24 39 56 75 96 119 144 171]
print( arr2/arr1) # 两个矩阵对应位置的元素相除
# [11. 6. 4.33333333 3.5 3. 2.66666667
# 2.42857143 2.25 2.11111111]
print(arr2%arr1) # 对应位置取余
# [0 0 1 2 0 4 3 2 1]
print(arr1**2) # 单个矩阵每个元素都取2次方
# [ 1 4 9 16 25 36 49 64 81]
求最大值最小值
import numpy as np
# 求最大值
arr = np.array([[1, 4, 6, 7], [9, 5, 7, 8]])
print(arr.max())
# 求最小值
print(arr.min())
numpy生成随机数
import numpy as np
# 生成3行4列0到1之间的随机小数
print(np.random.rand(3,4))
import numpy as np
np.random.seed(1)# 永不随机,固定的数
print(np.random.rand(3,4))
rs = np.random.RandomState(1) # 永不随机,固定的数
rs.rand(3, 4)
pandas模块
pandas模块有什么用
支持文件存取操作
Series(了解)
类似于一维数组,只能放一维数组
import pandas as pd
import numpy as np
print(pd.Series(np.arange(10)))
# 打印结果
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int64
二维以上的数组使用DataFrame
DataFrame(掌握)
import pandas as pd
import numpy as np
print(pd.DataFrame(np.array([[1, 2, 3, 4], [1, 2, 3, 4]])))
# 打印结果
0 1 2 3
0 1 2 3 4
1 1 2 3 4
# 时间范围
dates = pd.date_range('2019-02',periods=7) # 默认从1月1日开始,
print(dates)
# 打印结果
DatetimeIndex(['2019-02-01', '2019-02-02', '2019-02-03', '2019-02-04',
'2019-02-05', '2019-02-06', '2019-02-07'],
dtype='datetime64[ns]', freq='D')
import pandas as pd
import numpy as np
dates = pd.date_range('2018-02', periods=7) # 日期
# print(dates)
goods_list = ['tesla', 'transformer', 'chognqiwawa', 'masaladi'] # 商品列表
price = np.random.rand(7, 4) # 随机商品价格,7行4列
# print(price)
df = pd.DataFrame(price, index=dates, columns=goods_list) # 约定俗成,习惯用 df
print(df)
# tesla transformer chognqiwawa masaladi
2018-02-01 0.993845 0.124944 0.534339 0.436508
2018-02-02 0.948098 0.921375 0.931371 0.288497
2018-02-03 0.965210 0.074648 0.108268 0.198268
2018-02-04 0.709131 0.207583 0.414028 0.520331
2018-02-05 0.146407 0.025101 0.399028 0.916314
2018-02-06 0.884905 0.319202 0.448119 0.721902
2018-02-07 0.549198 0.324437 0.872872 0.311014
df的相关方法及属性
# dtype 查看数据类型
# index 查看行序列或者索引
# columns 查看各列的标签
# values 查看数据框内的数据,也即不含表头索引的数据
# describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
# transpose 转置,也可用T来操作
# sort_index 排序,可按行或列index排序输出
# sort_values 按值排序,可以具体选择某一个标签
print(df.dtype) # 打印每一行的数据类型
print(df.index) # 打印所有的行的索引
print(df.columns) # 打印所有的列的标签
print(df.values) # 打印数据框内的数据,不含表头和索引的数据
print(df.sort_values(by=['tesla'], ascending=False)) # 按照标签'tesla'进行排序,可以控制升序或者降序
处理缺失值
test_data = '''
5.1,,1.4,0.2
4.9,3.0,1.4,0.2
4.7,3.2,,0.2
7.0,3.2,4.7,1.4
6.4,3.2,4.5,1.5
6.9,3.1,4.9,
,,,
'''
这个矩阵中缺失了一部分数据
import pandas as pd
from io import StringIO
test_data = StringIO(test_data) # 把test_data读入内存
df = pd.read_csv(test_data) # 从csv中读取test_data数据
print(df)
df2 = df.dropna(thresh=4, axis=1) # 0是行,1是列 thresh 表示存在正常数据的个数
print(df2)
df3 = df.dropna(thresh=1, axis=0) # 0是行,1是列
print(df3)
# df4 = df.dropna(subset['c2']) #
# print(df4)
df5 = df.fillna(value=33) # 缺失的值会被value值替换填充
print(df5)
合并数据
import pandas as pd
import numpy as np
df2 = pd.DataFrame(np.zeros((3, 4)))
df3 = pd.DataFrame(np.ones((3, 4)))
df4 = pd.concat((df2,df3),axis=0) # 默认是垂直合并
df5 = pd.concat((df2,df3),axis=1) # 改为1后是水平合并
print(df4,df5)
matplotlib模块
matplotlib模块有什么用?
图形可视化,主要用来画图
import matplotlib.pyplot as plt
# 只识别英语,所以通过以下两行增加中文字体
from matplotlib.font_manager import FontProperties
# %matplotlib inline # jupyter默认不显示图片,通过这一行告诉他显示图片
font = FontProperties(fname='D:\msyh.ttc')
classes = ['1班', '2班', '3班', '4班']
student_amounts = [30, 20, 30, 40]
classes_index = range(len(classes)) # [0,1,2,3]
# [0,1,2,3] [30,20,30,40]
plt.bar(classes_index, student_amounts)
plt.xticks(classes_index, classes, FontProperties=font)
plt.text(0, 32, '30')
plt.xlabel('班级', FontProperties=font)
plt.ylabel('学生人数', FontProperties=font)
plt.title('班级-学生人数', FontProperties=font)
plt.style.use('ggplot')
plt.plot()
plt.show()
11-2 numpy/pandas/matplotlib模块的更多相关文章
- numpy+pandas+ matplotlib模块(day18)
目录 numpy模块 二维数组 numpy数组的属性 T 数组的装置 dtype 数组元素的数据类型 size 数组元素的个数 ndim 数组的维数 shape数组的维度大小 astype 类型转换 ...
- python 数据分析工具之 numpy pandas matplotlib
作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...
- 第一章:AI人工智能 の 数据预处理编程实战 Numpy, Pandas, Matplotlib, Scikit-Learn
本课主题 数据中 Independent 变量和 Dependent 变量 Python 数据预处理的三大神器:Numpy.Pandas.Matplotlib Scikit-Learn 的机器学习实战 ...
- 常用统计分析python包开源学习代码 numpy pandas matplotlib
常用统计分析python包开源学习代码 numpy pandas matplotlib 待办 https://github.com/zmzhouXJTU/Python-Data-Analysis
- Python模块简介及安装 [numpy,pandas,matplotlib,scipy,statsmodels,Gensim,sklearn,keras]
https://pan.baidu.com/s/1bpVv3Ef 67bd 模块安装文件下载地址 pip install "numpy-1.12.0b+mkl-cp35- ...
- numpy, pandas, matplotlib等常用库的学习手册
pandas介绍: 待续 参考资料: 中文:https://www.cnblogs.com/skying555/p/5914391.html 英文:http://www.datadependence. ...
- Ipython自动导入Numpy,pandas等模块
一.引言 最近在学习numpy,书上要求安装一个Ipythpn,可以自动导入Numpy,pandas等数据分析的模块,可是当我安装后,并不能自动导入numpy模块,还需要自己import.我就去查了一 ...
- numpy+pandas+matplotlib+tushare股票分析
一.数据导入 安装tushare模块包 pip install tushare http://tushare.org/ tushare是一个财经数据接口包 import numpy as np imp ...
- numpy pandas matplotlib
import numpy as np import pandas as pd import matplotlib.pyplot as plt ---------------numpy--------- ...
随机推荐
- SPOJ:The Next Palindrome(贪心&思维)
A positive integer is called a palindrome if its representation in the decimal system is the same wh ...
- JSOI2010 联通数
传送门 这道题的题目描述看起来很奇怪.实际上的意思是要求在这个有向图之内能到达的点对有多少,解释一下题里的图片就是(1,1),(1,2),(1,3),(1,4),(1,5),(2,2),(2,3),( ...
- bzoj1861 [Zjoi2006]Book 书架——splay
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1861 发现自己想splay的时候总是纠结那个点权是什么,因为splay原本是二分查找树... ...
- c++性能测试工具:google benchmark入门(二)
上一篇中我们初步体验了google benchmark的使用,在本文中我们将更进一步深入了解google benchmark的常用方法. 本文索引 向测试用例传递参数 简化多个类似测试用例的生成 使用 ...
- ASP.NET验证控件CustomValidator客户端验证DropDownList、TextBox
<asp:DropDownList ID="ddlTown" runat="server"> <asp:ListItem Value=&quo ...
- Ubuntu 12.04 root默认密码? 如何使用root登录? (转载)
转自:http://www.lupaworld.com/article-219280-1.html 在安装Ubuntu 12.04时并没有设置root的密码,登录的时候也没有使用root账户.当我们使 ...
- bzoj 1922: [Sdoi2010]大陆争霸【dijskstra】
d[u]为u被几个节点保护,d1[u]为最早到u的时间,d2[u]为u的最早可进入时间(保护点都被打下来了的时候),然后最终最早进入时间就是max(d1[u],d2[u]),把这个作为权值放进小根堆, ...
- springboot(八) 嵌入式Servlet容器自动配置原理和容器启动原理
1.嵌入式Servlet容器自动配置原理 1.1 在spring-boot-autoconfigure-1.5.9.RELEASE.jar => springboot自动配置依赖 jar包下,E ...
- ROS学习笔记五:创建和使用ROS msg和srv
1 msg和srv简介 1.1 msg文件 msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下: int8, int16, int32, int64 (plus uint* ...
- python面向对象的3个特点
封装 封装是从业务逻辑中抽象对象时,要赋予对象相关数据与操作,将一些数据和操作打包在一起的过程.封装是使用对象的主要魅力之一,它提供了一个简单方法来创建复杂方案,解决了世界是如何工作的这一问题,我们自 ...