jupyter的下载和使用
下载numpy、pandas、matplotlib三个必备的包 交互式环境ipyhon pip install ipython 建议使用jupyter(基于ipython) pip install jupyter
jupyter会自动保存
然后在要打开jupyter的路径下启动命令窗口 然后输入jupyter notebook 就可以以这个路径为根目录打开jupyter 然后自动会在默认浏览器打开jupyter,或者复制命令行中的链接,在浏览器中打开
ipynb文件是mardown语法的
选中一个单元,按A会在上方创建一个单元,按住B会下下方创建 对于每一个小的单元,按两次D键删除 按Z键撤销,恢复 crtl+回车 运行单元里面的代码 M,变成markdown模式 按Tab自动补全 shift+Tab提示函数参数(一次Tab是简单的提示,两次Tab详细提示)
代码在执行的时候,前面会有*号,窗口会有漏斗标志 ![在这里插入图片描述](https://img-blog.csdnimg.cn/383bf5d532ec4c54888835886bd4841f.png)
一个?打印docstring,两个??打印源码 ?也可以使用在自己写的函数上 ![在这里插入图片描述](https://img-blog.csdnimg.cn/dec73b5629a0462f9e76cd6b8544b548.png)
%run xxx.py(相对路径或者绝对路径) 执行外部的脚本或者python文件 如果执行了外部的文件,那么该文件内的函数就能直接在当前会话中使用 ![在这里插入图片描述](https://img-blog.csdnimg.cn/41da06a904384a9ca906987dfa69819b.png)
运行记时:%time statement,只能记录运行一次的时间 运行多次的平均时间 %timeit statement 也可以通过参数指定跑多少次 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8a0f10f5f7704fd99dd7a78c7f805640.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/189ef98fe1d74ddfa4e58038142929c1.png)
如果想测多条语句的运行时间,%%timeit ![在这里插入图片描述](https://img-blog.csdnimg.cn/baa04811beed4ab7a56d81be4606ca82.png)
如果运行结果太长,会自动将结果折叠起来,需要滚动查看;点击左边会展开;双击会隐藏 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b454170ad085417b9dad6cc4d9cc6626.png)
%who 当前窗口中所有的变量和函数 %whos who的详细信息 %who_ls 返回一个字符串列表,里面是当前会话中的所有变量和函数名称,可以直接用列表中的变量使用 ![在这里插入图片描述](https://img-blog.csdnimg.cn/88da583276db4c509132dea17b08b3f8.png)
如果要执行系统命令,用!+命令 的形式执行 相当于将命令行搬到了jupyter中
lsmagic 显示出支持的所有魔法命令
![在这里插入图片描述](https://img-blog.csdnimg.cn/558d19b3b920483098c3304ce3aef9b6.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/b0a21bd1afbe4d2ba17afe59cd471c69.png)
%matplotlib inline 可以在Ipython编译器里直接使用,功能是可以内嵌绘图,并且可以省略掉plt.show()这一步。
Numpy
numpy提供的不是真正的矩阵,可以当作优化过的多维列表 scipy提供熟悉意义上的矩阵
创建
-
由列表创建 ![在这里插入图片描述](https://img-blog.csdnimg.cn/54bbcdd3105240c1942b73900f02ff93.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2dbe73f2d8284a3cb80ea7d60ef5351c.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d9dd1b2e9fba41e58182341441c76340.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/b1758f08e8f24dcf8dd608087dbcedf8.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/07f32739df3d4214b1e48d66a121d926.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/564a6e7c16a9421eb696f73b7b40d841.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/185c50bd529c43579ed894abf5129dfd.png)
retstep加上以后变成元组 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5fb57397af4745d6910a0f70929b6559.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9b1c6c0a0f4544afa34ec7a9cc647f04.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f757bd76520e4c6a91210cdc11f8a8d0.png)
产生正态分布的数据,loc均值,scale标准差 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d4b7261dcdb04be39327ede9c9ae9535.png)
标准正态分布,参数是各个维度 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3138206af2e243388461def346f482c1.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/4b290576c4fb403da9cf7d1a19b08182.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e67b70c13dd245b9923b6f24ddb20109.png)
可以用这个直接写,不需要加size=(),和np.random.random()一样 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e33674d25b8b45a7a89063368ced6b75.png)
属性
![在这里插入图片描述](https://img-blog.csdnimg.cn/faecd403b60d45e6aac2db7eb65b2e2e.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b08d779aca77431e93cadbb92e5cbf04.png)
基本操作
一维的和列表是一样的 多维的索引操作 ![在这里插入图片描述](https://img-blog.csdnimg.cn/296527e1a87442d0a60ecb5f04b6d545.png)
切片
![在这里插入图片描述](https://img-blog.csdnimg.cn/dba7571f383845b99d74c828919844ca.png)
取多个任意位置的数,需要用到np.ix_()方法 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6bd7409b2c5e486f9c2d88038db0a3a7.png)
变形
reshape,参数是一个元组,总体元素个数不能变 数组本身没有发生变化,需要用一个变量去接收改变后的值 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d8f39d2f8ed84eacb1898e05c2785552.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/df7bcdf0b15547ae9f817a3a6e73337b.png)
级联concatenate
增加行数叫垂直级联,即上下拼接vertical 增加列数叫水平级联,即左右拼接,horizontal
axis 轴 axes 轴的复数形式 axis=0表示对行操作,即垂直级联 axis=1表示对列操作,即水平级联 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a5eb26eb71674cdca6e42d1b1549a53d.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/66882932630d4329a9065832742f52ef.png)
hstack(元组),水平级联 vstack(),垂直级联 ![在这里插入图片描述](https://img-blog.csdnimg.cn/1b4ec2da98ae419f8ba3c9e4ddfaaf4a.png)
切分 split
np.split np.vsplit np.hsplit
axis=0 表示对行进行切割 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e5954235756a4c918f712612539e1d3d.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/620c8fdb24ae4c969cd405ba5d2f712c.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/04c440515e5b4ac6ac627e8e33919832.png)
拷贝副本copy() 深拷贝
如果要对数据进行修改,可以先copy(),直接赋值会修改原数据
聚合操作
np.sum(),np.max()/min() 默认axis=None,表示聚合成0维,也就是一个值 axis=0 表示对行操作,行没了,剩下列,也就是把每一列加起来
np.sum(array, axis=None) 一样 ![在这里插入图片描述](https://img-blog.csdnimg.cn/da6155800ff84813a77bfb82202f3981.png)
argmin,返回最小值的索引 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9a877392c4e7400ca752560c72725f69.png)
any只要有true返回true,all只要有false,返回false ![在这里插入图片描述](https://img-blog.csdnimg.cn/13b0f5811df2490ca6a6eb7bddd54d89.png)
np.nan 表示numpy,pandas中的空数据 Not a number
np.nansum()非空数据相加
![在这里插入图片描述](https://img-blog.csdnimg.cn/6ab51459ac2b454faa63855620dbdbc6.png)
矩阵操作
基本矩阵操作
n+1每个元素加1 n1 +n2 对应元素相加 ![在这里插入图片描述](https://img-blog.csdnimg.cn/27f2ba37bb794d19a1e6f1dc06ce375b.png)
a *b 普通的乘法,对应元素相乘 np.dot(a, b) 矩阵的积
广播机制
两条规则: 为缺失的维度补1 假定缺失元素用已有值填充
当参与运算的ndarray的shape不一致时,会触发广播机制,使维度变得一致
如下面这个例子,因为a只有一个维度,首先补一个维度,然后用已有值填充,变成两行0 1 2 ![在这里插入图片描述](https://img-blog.csdnimg.cn/965a455ddea04107882d80adaeb25f25.png)
排序
np.sort() 不会修改原数组 ndarray.sort() 修改原数组
部分排序
np.partition() 相当于找到最极端的几个值 最大的五个,-5,只是找出来,没有排序 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9b29f4610419408191bd5a7973e6f058.png)
Pandas
Series
如果由ndarray创建Series,传递的是该对象的引用,修改Series中的内容,ndarray中的内容会改变 而如果由列表创建的话,传递的是列表的拷贝,修改Series不会影响原列表中的内容 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9da058297ef74d08bc04bd227522d73d.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/bc4a350956f64c8ab3a1630741f29e5c.png)
由字典创建 ![在这里插入图片描述](https://img-blog.csdnimg.cn/4e3d1db5a3e647eeb61b0c570a56a25c.png)
索引和切片
显示索引,就是用存在的索引 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f9754668f77a4e7f8333c6a7b863f472.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/3920ab76d4c24249b67bfa4c0b48c42b.png)
隐式索引,就是系统分配的,0123… ![在这里插入图片描述](https://img-blog.csdnimg.cn/94d9797d14d44d83a75654acf3477117.png)
如果要返回索引和数值一起的情况 再套一层中括号 ![在这里插入图片描述](https://img-blog.csdnimg.cn/76aca268d36841d086186c5c4f34f633.png)
基本概念
属性shape, size, name Series可以指定名字
方法 head(), tail() pd.isnull() 一一判断series中所有元素是否为nan pd.notnull() ![在这里插入图片描述](https://img-blog.csdnimg.cn/8fd787d2d9aa43caa3e20af2ec337fff.png)
需要注意的是name是类属性 ![在这里插入图片描述](https://img-blog.csdnimg.cn/360148d2b8934754854b9afc9e11268f.png)
运算
适用于numpy数组的运算也适用于series
Series之间的计算: 在运算中自动对齐不同索引的数据 如果索引不对应,补nan ![在这里插入图片描述](https://img-blog.csdnimg.cn/baac336375ad4d918c287ef2fe30fa6c.png)
可以使用pandas封装的add()函数,保留原始的index的值 ![在这里插入图片描述](https://img-blog.csdnimg.cn/05e0fed225cf4e20acbbbb207fa3a811.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/bacd77e42b6d414ab040854022a39ee5.png)
DataFrame
行索引:index 列索引:columns 值:values
分块创建,也可以采用字典创建 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8858776a56a04caaa05ca95abf337757.png)
属性
values, columns, index, shape ![在这里插入图片描述](https://img-blog.csdnimg.cn/13adcbb5ceb74e5386d05b79d090a09b.png)
索引
对行操作,要用loc,列操作,直接括号 对列进行索引:
注意新增一列的时候,不能使用属性的写法 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0601296c473c47819845d5b8a1f79702.png)
对行索引: ![在这里插入图片描述](https://img-blog.csdnimg.cn/2b179ad65b4d41f8a1eee63bf3ac69ac.png)
对元素的索引: 先列后行 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5a9f3982bfdd445a8209a2660b7bc263.png)
先行后列 下面这个推荐写法,上面的链式索引不推荐 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cfbf015ee0e541cf82fdac8fbf60cbc2.png)
切片
什么也不返回,是因为直接使用这个,是在进行行切片 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d84e0c37369d4fb092dd86f28e618b56.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/32bfe5ba0fec4dc2afdbd62490887240.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6c86c39d4d8241108f68a8a34ff7f1ab.png)
对列切片 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6a35a9daf5944f8e9312f4af93106cd7.png)
索引总结
- 行索引用loc,列索引用[]
- 对元素的索引,先索引行,再列,df.loc[index, col]
- 如果还想返回dataframe,那么使用两层中括号
- 注意:直接使用中括号的时候,如果是切片,是对行进行切片
- 注意:不要使用链式索引
要使返回结果仍为dataframe,需要加中括号 ![在这里插入图片描述](https://img-blog.csdnimg.cn/61eafb4694f34fbc80d8a4ddab0e6d6d.png)
这样会报错,因为找这两行,而没有math这一行 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5bd57b9edf574ed696e14c0c031a7228.png)
运算
![在这里插入图片描述](https://img-blog.csdnimg.cn/844f9d4c8549432bb1c18003556d8a58.png)
dataframe和dataframe运算,只有行列索引都相同才会运算 和series一样,如果要保留,需要用add方法,设置fill_value = 0
dataframe 和 series相加,索引一样可以相加 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0e24bc85c9074bdc9e6b8a1d82ac2734.png)
但是如果改成行索引的series 使用用算符进行操作,默认比较的df的列索引和series的行索引 ![在这里插入图片描述](https://img-blog.csdnimg.cn/58913481214448e6929bcec3ef5ded33.png)
使用axis改变运算方向 ![在这里插入图片描述](https://img-blog.csdnimg.cn/12e3737097574f97b7c928e74ec86ccc.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/65b410613547467caef1fc769c97225b.png)
|