小案例: Pandas的apply方法
插播一条广告
Python数据挖掘与文本分析&Stata应用能力提升与实证前沿云特训
Python部分上课时间为 6月29日- 7月2 日,感兴趣的童鞋欢迎关注
pandas中有一个特别好用的apply方法,包括
-
列内计算,只对某列进行某种计算
-
列间计算,对多个列之间进行复杂的计算
下面我们看实验数据
import pandas as pd import numpy as np matrix = [ ['张三', '1995-12-31', '山东', '本科'], ['李四', '1993-05-29', '河北', '大专'], ['王五', '1995-03-14', '山西', '硕士'], ['赵六', '1992-07-08', '内蒙古', '本科'], ] df = pd.DataFrame(matrix, columns=['Name', 'Birthday', 'From', 'Edu']) df
Name | Birthday | From | Edu | |
---|---|---|---|---|
0 | 张三 | 1995-12-31 | 山东 | 本科 |
1 | 李四 | 1993-05-29 | 河北 | 大专 |
2 | 王五 | 1995-03-14 | 山西 | 硕士 |
3 | 赵六 | 1992-07-08 | 内蒙古 | 本科 |
df.apply(func)或series.apply(func)
axis控制操作方向
-
0 表示列方向
-
1 表示行方向
列内计算
一般列内计算,实际上主要是对series做的操作,比如选中dataframe某列。
df['colname'].apply(func)
默认只对 列方向
对colname列做func操作,例如计算每个员工的出生年份、年龄。
def year(birthday): #截取birthday字符串的年份 return int(birthday[:4]) #对birthday列使用year函数操作 df['Year'] = df['Birthday'].apply(year) #年龄 df['Age'] = 2020-df['Year'] df
Name | Birthday | From | Edu | Year | Age | |
---|---|---|---|---|---|---|
0 | 张三 | 1995-12-31 | 山东 | 本科 | 1995 | 25 |
1 | 李四 | 1993-05-29 | 河北 | 大专 | 1993 | 27 |
2 | 王五 | 1995-03-14 | 山西 | 硕士 | 1995 | 25 |
3 | 赵六 | 1992-07-08 | 内蒙古 | 本科 | 1992 | 28 |
列间计算
df.apply(func, axis=1)不同列之间可以有复杂的计算,比如想计算 设计自我介绍模板
def intro(r): #r代指dataframe中的任意行,是series类型数据,拥有类似字典的使用方法。 return '大家好,我是{name},\ 来自{province}省,\ 今年{age}岁了!'.format(name=r['Name'], province=r['From'], age=r['Age']) df['Intro'] = df.apply(intro, axis=1) df
Name | Birthday | From | Edu | Year | Age | Intro | |
---|---|---|---|---|---|---|---|
0 | 张三 | 1995-12-31 | 山东 | 本科 | 1995 | 25 | 大家好,我是张三, 来自山东省, 今年25岁了! |
1 | 李四 | 1993-05-29 | 河北 | 大专 | 1993 | 27 | 大家好,我是李四, 来自河北省, 今年27岁了! |
2 | 王五 | 1995-03-14 | 山西 | 硕士 | 1995 | 25 | 大家好,我是王五, 来自山西省, 今年25岁了! |
3 | 赵六 | 1992-07-08 | 内蒙古 | 本科 | 1992 | 28 | 大家好,我是赵六, 来自内蒙古省, 今年28岁了! |