最近看的一本书叫做《对比Excel,轻松学习Python数据分析》
书中还是学到了很多知识点,下面总结的是比较基础的操作,自己也常用:
- 数值替换
- 数值排序
- 数值排名
- 数值删除
- 数值计数
- 唯一值获取与查找
数值替换
数值替换常用在存在异常值处理、缺失值处理中,三种替换方法:
- 一对一替换
- 多对一替换
- 多对多替换
一对一
Excel中通过Ctrl+H调出替换界面,分别输入查找内容和替换内容即可
Python中利用的是replace方法
1 | df.replace(A,B) # 将A替换成B |
如果是对缺失值进行替换,则
1 | df.replace(np.NaN,0) # 将缺失值用0替换,此时作用同于fillna()方法 |
多对一
Excel中借助if函数和OR函数实现
1 | if(OR(D:D=240,D:D=260,D:D=280),33,D:D) # 如果数值等于240,260,280,替换成33 |
Python还会借助replace方法:将需要替换的值放进一个列表中即可。
1 | df.replace([A,B],C) |
多对多
Excel中通过多个if嵌套语句来实现
- 如果数值为32,替换成32
- 如果是260,替换成33
- 如果是280,替换成34
1 | if(D:D=240,32,if(D:D=260,33,if(D:D=280,34,D:D)) |
Python中实现还是通过replace方法,将待替换值和替换值用字典的形式表示
1 | df.replace({"A":"a","B":"b"}) # 将A用a替换,B用b替换 |
数值排序
一列数据排序
选择待排序的数据之后,Excel中直接通过菜单栏中的排序按钮,选择升序或者降序
Python
中的排序通过sort_values()
方法
- 指定列名
- 指定升序还是降序,默认是升序
1 | df.sort_values(by = ["ID"], ascending = False ) # 改成降序 |
缺失值排序
如果待排序的书数据中存在缺失值,通过设置参数na_position
对缺失值的显示位置进行设置
- last,默认显示在最后面
- first
多列数值排序
Excel
中是选择待排序的数据,单击菜单按钮中的排序和筛选
- 选择待排序的列
- 选择每列的升序还是降序
Python中的实现是通过sort_values():后面通过列表的形式指定待排序的列和每列的排序的方式
1 | df.sort_values(by=["col1","col2"],ascending=[True,False]) # col1是升序,col2是降序 |
数值排名
Excel
主要使用的是两个方法,不同之处在于对重复值的方式。没有重复值,二者效果相同
- rank_avg(number, ref,order):若有重复值,返回重复值的平均排名
- number:待排名的数值
- ref:一整列的数值范围
- order:排序方式
- rank_eq(number, ref, order):返回重复值的最佳排名
Python
Python中使用的是rank()方法,两个参数:
- ascending:指明升序还是降序,默认是升序
- method:重复值的处理情况
method | 含义 |
---|---|
average | 同Excel中的rank.avg |
first | 按值在数据中出现的先后顺序 |
min | 同Excel中的rank.eq |
max | 取重复值对应的最大排名,与min相反 |
数值删除
Excel中删除非常简单,主要是讲解Python中怎么删除,使用的是drop方法
比如删除两个字段"col1"、“col2”,有两种写法:
1 | df.drop(["col1","col2"],axis=1) # 直接写出属性的名字 |
两种方法都需要指明axis=1
直接将属性名字传给columns
1 | df.drop(columns=["col1","col2"]) # 不指定axis=1 |
如果是删除index,使用axis=0
数值计数
Excel
使用的是countif函数
1 | countif(range, critieria) |
- range:待计数的一系列值的范围
- critieria:某个值或者某个条件
Python
使用的是value_counts()
,统计出来的是个数;如果想看每个值的占比,使用参数normalize=True
,默认是降序排列。设置sort=False可以改成升序。
唯一值获取与数值查找
唯一值获取
Excel中将该列值复制黏贴后删除重复值即可
Python中使用unique()方法
数值查找
Python中使用的是isin()方法,在某列上调用方法
- 在,返回T
- 不在,返回F
针对某个列查找
针对全表
1 | df.isin([31,21]) |