第一章 pandas入门
1.1/1.2 jupyter基础
创建虚拟环境
a、创建指定python版本的虚拟环境
conda create -n 环境变量名 python=3.6
b、虚拟环境命令
conda env list ——查看**当前拥有的虚拟环境
conda remove -n 环境变量名 --all ——删除*环境变量
activate 环境变量名 —— 进入/激活环境变量
conda deactivate—— 退出环境变量
Cell 单元知识:
Cell有四种功能:Code、Markdown、Raw NBConvert、Heading(有些可能没有了,因为和Markdown 效果一样),这四种功能可以互相切换。
Code用于写代码
-
Markdown用于文本编辑
- 命令模式:蓝色 无铅笔
- 编辑模式:绿色 有铅笔
Raw NBConvert中的文字或代码等都不会被运行
Heading是用于设置标题的,这个功能已经包含在Markdown中了
markdown两种模式
a、命令模式: 蓝色 无铅笔
b、编辑模式:绿色 有铅笔
命令模式常用快捷键
- enter:进入 cell 单元编辑
- shift+enter:运行当前行并跳转到下一行,没有下一行会创建
- ctrl+enter:只运行当前行
- alt+enter:运行当前行,并创建一行空行
- a:往上插入一行
- b:往下插入一行
- y:转换为代码
- m:转换为Markdown
- r:转换为Row NBconvert
- x:剪切一行
- c:复制一行
- v:粘贴剪切/复制行到下一行
- shift+v:粘贴剪切/复制行到上一行
- dd:删除一行
- z:撤销删除
- ctrl+z:撤销输入修改,但是要选择具体的单元(除非修改后还没有运行),这个其实是编辑模式的
- ctrl+s:保存节点,便于恢复,存储在file/revert to checkpoint中
- f:查找和替换
- k 键 或者 方向上键:选择上一行
- j 键 或者 方向下键:选择下一行
- shift+k 或者 shift + 方向上键:选择当前行和上一行,一直按会选择很多行
- shift+j 或者 shift + 方向下键:选择当前行和下一行 (也可以用 shift 来选择多行,shift +鼠标单击 第一行和最后一行来选择) 注意:好像不能跨行选择,即选择的行都是连续的
- shift+m:merge 合并选择的行,如果没有选择多行那么会合并当前行和下一行
- space:往下滑动多行
- shift+space:往上滑动多行
- ctrl+shift+p:进入的界面是将下面这些快捷键又变成了选择按钮了
- 1、2、3 :这些都是将 cell 单元转化为 markdown,但是只对第一行起作用
编辑模式常用快捷键
- tab键:代码补全
- shift+tab:函数提示
- ctrl + ]:缩进,就是往后退格,相当于tab 键的功能,只不过不需要指定在行首输入
- ctrl + [:取消缩进
- ctrl+a:全选
- ctrl+z:撤销
- ctrl+shift+z:对撤销的操作进行撤销
- ctrl+y:对撤销的操作进行撤销
- 对cell 单元格内容进行位置定位:
- ctrl+home、ctrl+up: 定位到当前 cell 单元格所有内容的最前头
- ctrl+end、ctrl+down:定位到当前 cell 单元格所有内容的最后头
- ctrl+left: 定位到当前 cell 单元格光标位置的下一个词语结尾
- ctrl+right:定位到当前 cell 单元格光标位置的上一个词语开头
配合shift使用可以快速选中: 比如ctrl+shift+left ,可以选中左边数据
- ctrl+backspace:删除前一个单词
- ctrl+delete:删除后一个单词
- ctrl+m、esc:切换到命令模式
- 总结:基本上命令模式用 shift ,编辑模式用 ctrl
- 使用分号可以阻止该行函数的结果输出,这种需求也可以注释代码来实现 查看函数帮助可以使用多种方法: 1、shift+tab 2、?func 3、help(func)[图片上传失败...(image-85974c-1614923346717)]
魔法函数:
使用魔法函数可以简单地实现一些单纯 python 要很麻烦才能实现地功能
- %:行魔法函数,只对本行代码生效
- %%:cell 魔法函数,在真个 cell 单元中生效,必须放到 cell 首行
- %lsmagic:列出所有的魔法函数
- %magic:查看各个魔法函数的说明
?后面加上魔法函数名称,可以查看该魔法函数的说明
1.3/1.4 pandas基础入门
dataframe数据类型
-
创建dataframe
-
使用多维列表创建
- 原始数据为多维列表(列表里面套列表)
-
使用数组字典创建
- 原始数据为多维字典,创建作为行列
-
两种创建方式差异
- 多维列表创建没有列名
- 数组字典创建字典名直接作为列名
-
-
看数据类型
- type(df)——查看任何对象的数据类型
-
获取和更改dataframe索引
获取行索引——df.index
获取列索引——df.columns
获取行列索引——df.axes
更改行索引——df.set_index(列名)
更改列索引——df.columns=[列名1,列名2,....]
-
数据预览
df.info()——读取dataframe的所有信息
df.describe()——查看dataframe的描述性统计
df.head()——读取数据的前几行,如括号没有参数默认5行
df.tail()——读取数据的后几行,没有参数默认5行
df.shape——查看数据几行几列
df.size——查看数据元素个数
df.dtypes——查看数据类型
DataFrame和Series的比较
-
创建Series
-
列表创建
- 原始数据为列表
-
字典创建
- 原始数据为字典
创建有索引的Series
-
-
将series转换为dataframe
-
转化为dataframe
- to_frame()函数
-
转化为dataframe并且行列转置
- to_frame().T函数
-
-
Dataframe和Series的差异
- 前者为二维数组,后者为一维数组
- 可以理解为前者有行列两个维度,前者的某一列就是后者
-
Pandas 读取文件
- pd.csv(路径,属性)
- pd.csv(路径,header=0)——将第0行作为标题行
- pd.csv(路径,skiprows=[1,2])——跳过第1,2行
- pd.csv(路径,keep_default_na=False)——不显示Na值
- pd.csv(路径,属性)
第二章 dataframe操作
dataframe索引类型
- 使用位置做索引
- 使用列表做索引
- 使用切片做索引
- 使用布尔做索引
2.1 获取行
-
使用loc或者iloc函数实现
- 方式1:列表索引,loc内索引为列表
- 方式2:切片索引,从哪一行到哪一列
- 方式3:位置索引iloc
- loc与iloc:前者基于索引值,左闭右闭区间;后者基于位置,左闭右开区间
- 方式4:布尔索引,loc内为某条件
2.2 获取列
-
获取列
- 不用函数,直接中括号
- 布尔索引和切片索引选出来的是行
-
获取行和列
- 使用iloc或者loc+切片+loc+2层方法(4种都行)
2.3 dataframe相关操作
-
更改列名
-
方法1:新建更改
- df.columns=[列名1,列名2,列名3.....]
-
方法2:rename更改
- df.rename(columns=[列名1,列名2,列名3.....])
-
-
替换信息
- df.replace({’要替换的列:{‘替换的值’:'替换后的值'})
- df[列名].replace({‘替换的值’:'替换后的值'},inplace=True)
- 注意一定要加inplace=True才能确认修改
- 方法2:map函数
- df[列名]=df.map(字典)
-
查看信息
查看某列多少值——df[列名].unique()
查看某列各值个数——df[列名].value_counts()
-
数据排序
- df.sort_values(列名,ascending=True/False,inplace=True/False)
-
求极值
- df.max()/df.min()——最大值最小值
-
求和与累积求和
- df.sum()
- df.cumsum()
-
增加/删除行列
- df[列名]=值——增加列
- del df[列名]——删除列
- df.drop(labels=0)——删除行,默认labels=0为删除行,labels=1为删除列
-
寻找最值索引位置
- df.idxmax()——最大值索引位置
- df.idxmin()——最小值索引位置
-
矩阵计算
- dataframe实质上是矩阵,可以进行矩阵的加减乘除
第三章 dataframe操作
1、数据关联
- 数据拼接——pd.concat([df1,df2])
-
关联,默认inner join
pd.merge(df1,df2,on='关联列')
pd.merge(df1,df2,on=['关联列1','关联列2'....])
-
自定义关联
- pd.merge(df1,df2,how='left'/'right'/'outer',on='关联列')
-
列名不一样关联
- pd.merge(df1,df2,left_on='关联列名1',right_on='关联列名2')
关联列为索引时
pd.merge(df1,df2,left_index=True,right_on=True)
2、数据分组
- 分组——df.groupby(列名)
-
分组属性
df.groupby.size()——各组元素个数
df.groupby.groups——把每个分组的元素罗列出来
len(df.groupby)——分组后的组数
-
罗列每组分类——解包
- for name,item in group: print(name)
df.group.mean()——各组求平均值
df.group.sum()——各组求和
-
分组后聚合
- df.group.agg([np.sum,np.mean....])——分组后聚合,类似数据透视
- df.group.agg({’age':np.sum,'user_id':np.mean....})——不同列不同聚合
3、转换过滤
- 替换空值——df.fillna(替换后的值)
-
将每个分组转化为某个特定指标,结合lambda函数
- df.groupby('列名).[列名1,列名2,....].transfrom(lambda (s-s.mean())/s.std())
-
分组过滤
- df.groupby(列名).filter(条件)
4.pandas 连接mysql
- 读取内容
import pandas import sqlalchemy engine = sqlalchemy.**create_engint("mysql+pymysql://用户名:密码@sql地址:端口地址/数据库名") pd.read_sql(读取数据的sql语句,engine)
- 写入内容
pd.to_sql('写入的表名',engine,index=False,if_exsits='append')——如果存在,追加数据
第四章 numpy操作
- array的创建
-
列表/多维列表创建
- np.array([列表])
- np.array([[列名],[列表],[列表]......)
-
填充创建
- 填充指定值:np.full([行数,列数],填充值)
- 填充零:np.zeros((行数,列数))
- 填充1:np.ones((组数,行数,列数))
-
使用序列创建
- 新建序列创建:np.arange(起始值,结束值,步长)——从起始值到结束值每个步长取1个数,左闭右开
- 重新组合序列:np.arange(....).reshape((组数,行数,列数))
- 随机矩阵创建: np.random.random((组数,行数,列数))
-
划分创建
- np.limspace(起始值,结束值,划分份数)
-
- 查看数据类型
- type(np.array(....))——查看数据类型
- np.array(....).dtype——查看array值的数据类型(注意,所有元素只有数据类型一致)
-
numpy索引
-
切片
-
某行某列值
- data[行数,列数]
-
某列的全部值
- data[:,列数]
-
从初始行到结束行的所有相应列:
- data[行数起始值:行数结束值+1,[列数1,列数2.....]]
-
行数1列数1的值+行数2列数2的值,必须一一对应:
- data[[行数1,行数2],[列数1,列数2]]
-
-
索引
- 单条件布尔索引:data[data==值]
- 多条件布尔索引:data[(data==值1)|(data==值1)]********
-
切片
-
numpy相关操作
- 更改数据类型——data.astype('更改后的数据类型')
- 所有元素求和——data.sum()
- 求指数——np.exp(data)
- 开方——np.sqrt(data)
- 多维变一维,多个组组成一个组——data.ravel()
- 矩阵拓展——np.tile(原始矩阵,(行拓展倍数,列拓展倍数))
- 矩阵拼接
- 水平拼接——加到每行后面,列变:np.hstack((矩阵a,矩阵b))
- 垂直拼接——多家几行,列不变:np.vstack((矩阵a,矩阵b))
- 矩阵分割
- 水平分割(行数不变,每行列数减少)——np.hsplit(要分割矩阵,分割份数)
- 垂直分割(列数不变,行数减少)——np.vsplit(要分割矩阵,分割份数)