小技巧 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
0201935012019365220201
转 datetime 的 小技巧
步骤 1: 创建整数
df["int_number"] =
df["year"]*1000 + df["day_of_year"]
打印 df 结果:
year day_of_year int_number
0201935020193501201936520193652202012020001
步骤 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 A1 Alica C2 Emily A3 Robert D4 Tomas A5 Zhang B6 Liu B7 Wang C8 Jack A9 Wsx E10 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].indexsmall_categories
结果:
Index(['F', 'E', 'D'], dtype='object')
步骤 3:替换值
df["categories"] = df["categories"] \
.replace(small_categories, "Others")
替换后的 DataFrame:
name categories
0 Jone A1 Alica C2 Emily A3 Robert Others4 Tomas A5 Zhang B6 Liu B7 Wang C8 Jack A9 Wsx Others10 Guo Others
这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!
优快云大礼包:全网最全《全套Python学习资料》免费分享🎁
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

1️⃣零基础入门
① 学习路线
对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

② 路线对应学习视频
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
③练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!

因篇幅有限,仅展示部分资料
2️⃣国内外Python书籍、文档
① 文档和书籍资料

3️⃣Python工具包+项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!

②Python实战案例
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!

③Python小游戏源码
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!

4️⃣Python面试题
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


5️⃣Python兼职渠道
而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。


上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

本文介绍了使用Pandas进行数据清洗和特征工程的五个实用技巧,包括使用map函数对分类变量进行编码,使用replace结合正则表达式清洗数值列,利用melt函数进行数据透视,以及将year和day_of_year转换为datetime对象,以及如何处理低频分类值的方法。
1250

被折叠的 条评论
为什么被折叠?



