小案例: Pandas的apply方法
source link: http://mp.weixin.qq.com/s?__biz=MzI1MTE2ODg4MA%3D%3D&%3Bmid=2650073684&%3Bidx=1&%3Bsn=5ade4b5d8952b476b19f6d329c036b16
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
插播一条广告
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']) dfName 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'] dfName 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) dfName 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岁了!
往期文章
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK