小案例: 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歲了! |