小案例: Pandas的apply方法

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


![](https://s4.51cto.com/images/blog/202012/30/8732ee5fb5eaec5ebd93c4ea8631b1a4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
**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


![](https://s4.51cto.com/images/blog/202012/30/4f41556903f7932897c29fb73d2378d9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
**列间计算**
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



![](https://s4.51cto.com/images/blog/202012/30/dc1af803e8cb6031a1c61af182f1a485.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

猜你喜欢

转载自blog.51cto.com/15069487/2578567