Python与算法社区

第443篇原创,干货满满

值得星标

01

02

03

三步加星标

你好,我是 zhenguo

我攥了很久才汇总出这个小技巧系列手册,现暂命名为:《Pandas数据分析小技巧系列手册1.0》

我会一篇5个小技巧陆续推送出来,如果可以欢迎星标我的公众号:Python与算法社区

小技巧1:如何使用map对某些列做特征工程?

先生成数据:

d = {
"gender":["male", "female", "male","female"],
"color":["red", "green", "blue","green"],
"age":[25, 30, 15, 32]
}df = pd.DataFrame(d)
df

gender 列上,使用 map 方法,快速完成如下映射:

d = {"male": 0, "female": 1}
df["gender2"] = df["gender"].map(d)

小技巧2:使用 replace 和正则清洗数据

Pandas 的强项在于数据分析,自然就少不了数据清洗。

一个快速清洗数据的小技巧,在某列上使用 replace 方法和正则,快速完成值的清洗。

源数据:

d = {"customer": ["A", "B", "C", "D"],
"sales":[1100, "950.5RMB", "$400", " $1250.75"]}df = pd.DataFrame(d)
df

打印结果:

customer sales
0 A 1100
1 B 950.5RMB
2 C $400
3 D $1250.75

看到 sales 列的值,有整型,浮点型+RMB后变为字符串型,还有美元+整型,美元+浮点型。

我们的目标:清洗掉 RMB$ 符号,转化这一列为浮点型。

一行代码搞定:(点击代码区域,向右滑动,查看完整代码)

df["sales"] = df["sales"].replace("[$,RMB]","", regex = True) \
.astype("float")

使用正则替换,将要替换的字符放到列表中 [$,RMB],替换为空字符,即 ""

最后使用 astype 转为 float

打印结果:

customer sales
0 A 1100.00
1 B 950.50
2 C 400.00
3 D 1250.75

如果不放心,再检查下值的类型:

df["sales"].apply(type)

打印结果:

0    <class 'float'>
1    <class 'float'>
2    <class 'float'>
3    <class 'float'>

小技巧3:使用 melt 如何对数据透视分析?

构造一个 DataFrame:

d = {\
"district_code": [12345, 56789, 101112, 131415],
"apple": [5.2, 2.4, 4.2, 3.6],
"banana": [3.5, 1.9, 4.0, 2.3],
"orange": [8.0, 7.5, 6.4, 3.9]
}df = pd.DataFrame(d)
df

打印结果:

district_code apple banana orange
0123455.23.58.0
1567892.41.97.5
21011124.24.06.4
31314153.62.33.9

5.2 表示 12345 区域的 apple 价格,并且 apple, banana, orange,这三列都是一种水果,那么如何把这三列合并为一列?

使用 pd.melt

具体参数取值,根据此例去推敲:

df = df.melt(\
id_vars = "district_code",
var_name = "fruit_name",
value_name = "price")
df

打印结果:

district_code fruit_name price
012345 apple 5.2
156789 apple 2.4
2101112 apple 4.2
3131415 apple 3.6
412345 banana 3.5
556789 banana 1.9
6101112 banana 4.0
7131415 banana 2.3
812345 orange 8.0
956789 orange 7.5
10101112 orange 6.4
11131415 orange 3.9

以上就是长 DataFrame,对应的原 DataFrame 是宽 DF.

小技巧4:已知 year 和 dayofyear,怎么转 datetime?

原 DataFrame

d = {\
"year": [2019, 2019, 2020],
"day_of_year": [350, 365, 1]
}
df = pd.DataFrame(d)
df

打印结果:

  year day_of_year
02019350
12019365
220201

转 datetime 的 小技巧

步骤 1: 创建整数

df["int_number"] =
df["year"]*1000 + df["day_of_year"]

打印 df 结果:

year day_of_year int_number
020193502019350
120193652019365
2202012020001

步骤 2: to_datetime

df["date"]=pd.to_datetime(df["int_number"],
format = "%Y%j")

注意 "%Y%j" 中转化格式 j

打印结果:

 year day_of_year int_number date
0201935020193502019-12-16
1201936520193652019-12-31
22020120200012020-01-01

小技巧5:如何将分类中出现次数较少的值归为 others?

这也是我们在数据清洗、特征构造中面临的一个任务。

如下一个 DataFrame:

d = {"name":['Jone','Alica','Emily','Robert','Tomas','Zhang','Liu','Wang','Jack','Wsx','Guo'],"categories": ["A", "C", "A", "D", "A", "B", "B", "C", "A", "E", "F"]}
df = pd.DataFrame(d)
df

结果:

 name categories
0 Jone A
1 Alica C
2 Emily A
3 Robert D
4 Tomas A
5 Zhang B
6 Liu B
7 Wang C
8 Jack A
9 Wsx E
10 Guo F

D、E、F 仅在分类中出现一次,A 出现次数较多。

步骤 1:统计频次,并归一

frequencies = df["categories"].value_counts(normalize = True)
frequencies

结果:

A    0.363636
B    0.181818
C    0.181818
F    0.090909
E    0.090909
D    0.090909
Name: categories, dtype: float64

步骤 2:设定阈值,过滤出频次较少的值

threshold = 0.1
small_categories = frequencies[frequencies < threshold].index
small_categories

结果:

Index(['F', 'E', 'D'], dtype='object')

步骤 3:替换值

df["categories"] = df["categories"] \
.replace(small_categories, "Others")

替换后的 DataFrame:

 name categories
0 Jone A
1 Alica C
2 Emily A
3 Robert Others
4 Tomas A
5 Zhang B
6 Liu B
7 Wang C
8 Jack A
9 Wsx Others
10 Guo Others

福利时间:本次联合【机械工业出版社华章公司】为大家带来《机器学习实战:基于Scikit-Learn、Keras和TensorFlow(原书第2版)》。

《机器学习实战:基于Scikit-Learn、Keras和TensorFlow(原书第2版)》,国外AI“四大名著”之一!AI霸榜书重磅更新!“美亚”AI+神经网络+CV+NLP四大畅销榜首图书,基于TensorFlow 2和新版Scikit-Learn全面升级,内容增加近一倍!前谷歌工程师撰写,Keras之父和TensorFlow移动端负责人鼎力推荐,从实践出发,手把手教你从零开始搭建起一个神经网络。详情点击下面图片:

送书方法:本次一共送3本,每本149元,含金量很高。首先,关注我下面这个微信,关注后再在留言区聊聊:你和 Python与算法社区 一起成长的故事,如怎么关注的,关注后收获大不大,学到什么又有什么建议等,留言最走心的前3名每人一本。

不必打赏

给我点个赞

就心满意足了

Pandas 数据分析 5 个实用小技巧相关推荐

  1. 送你16个matplotlib绘图实用小技巧(附代码)

    来源:雪山飞猪 本文约2800字,建议阅读10分钟 本文为你分享16个matplotlib绘图实用小技巧. 标签:数据分析 1. 添加标题-title import numpy as npimport ...

  2. 微信公众号运营都有哪些实用小技巧,你学会了吗

    移动媒体的发展,一些新媒体平台也变得热门起来,其原因人流量随之增长起来,像公众号.自媒体.短视频等,这些平台都是流量非常多的,公众号在微信刚出来的时候,还不怎么热门,也是近几年才受到企业受宠,很多企业 ...

  3. ubuntu python opencv 实用小技巧小结

    ubuntu tmux 真的好用: 实用教程: https://wdxtub.com/2016/03/30/tmux-guide/ ctrl + b + [ : 可移动光标 C++ char 和 st ...

  4. VC的若干实用小技巧

    Visual C++6.0(5.0)开发工具功能非常强大,但是对于初学者来说,却有很多细节的问题需要注意.作者搜集整理了以下一些实用小技巧,希望对初学者有所帮助. 1:使用vc开发项目时,常会遇到这种 ...

  5. 实用小技巧(一):UIScrollView中上下左右滚动方向的判断

    https://www.jianshu.com/p/93e8459b6dae 2017.06.01 01:13* 字数 674 阅读 1201评论 0喜欢 1 2017.06.01 01:13* 字数 ...

  6. VC的若干实用小技巧 (如何干净的删除一个类)

    Visual C++6.0(5.0)开发工具功能非常强大,但是对于初学者来说,却有很多细节的问题需要注意.作者搜集整理了以下一些实用小技巧,希望对初学者有所帮助. 1:使用vc开发项目时,常会遇到这种 ...

  7. 总结MySQL建表、查询优化实用小技巧

    MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...

  8. mysql建表测试_总结MySQL建表、查询优化实用小技巧

    MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...

  9. 优化大数据分析的五个小技巧

    数据正在变得越来越重要,一些企业甚至把数据当成自己的"天".近年来越来越多的公司已经意识到数据分析可以带来的价值,并且已经跳上了大数据旅行车.实际上,现在所有的一切都在被监控和测量 ...

最新文章

  1. Java NIO 系列教程 转
  2. 读书笔记《单核工作法》_3原理2,3
  3. 通过composer安装阿里大于接口扩展
  4. leetcode 191. 位1的个数(移位操作)
  5. 生日快乐程序_别@官方了!云开发教你制作个性头像小程序,以后过节想加啥就加啥!...
  6. readdir函数_PHP readdir()函数与示例
  7. 交换机分布缓存_网络核心交换机和普通交换机有什么区别?
  8. 产品研发过程管理专题——基于产品的测试管理(用友软件测试流程初探)
  9. 高性能MySQL-3rd-(五)创建高性能索引
  10. Socket编程--TCP粘包问题
  11. [golang 易犯错误] golang 局部变量初始化:=的陷阱
  12. 2019最新超详细HUSTOJ在线判题系统及Virtual Judge的搭建
  13. 获取全年所有节假日非工作日
  14. linux vim编辑矩阵乘,VIM使用系列:二进制文件编辑
  15. 软件测试培训三个月骗局,三个月能学会吗?可以做测试工作吗?
  16. 短信服务器和运营商的区别,什么是短信服务商?与短信运营商的区别
  17. 复旦大学首届达观数据奖学金颁奖仪式圆满落幕,达观CEO陈运文博士与学院党委书记王新为获奖同学颁奖
  18. 用sync toy做增量备份
  19. 【YOLOv5报错】AssertionError: Label class 4 exceeds nc=4 in /xxxxxx解决方法
  20. 基于JAVA微博网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署

热门文章

  1. 去一个自带流量的团队真的不一样 No.189
  2. 广东省中职学校管理干部来访交流
  3. 跳槽薪资翻倍的程序员,都有哪些特质?
  4. Django项目开发纪要
  5. 使用Meven项目 错误: 找不到或无法加载主类
  6. 解决:FTP协议路径在资源管理器打开,总是默认跳转到某个浏览器打开
  7. 【励志】他只靠写代码,登上了胡润富豪榜!
  8. Latex+WinDet联立公式编号及一行多图片写法
  9. springboot的page
  10. 【算法分析】三维曲面的三角剖分算法分析