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

NameBirthdayFromEdu
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

NameBirthdayFromEduYearAge
0張三1995-12-31山東本科199525
1李四1993-05-29河北大專199327
2王五1995-03-14山西碩士199525
3趙六1992-07-08內蒙古本科199228

列間計算

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

NameBirthdayFromEduYearAgeIntro
0張三1995-12-31山東本科199525大家好,我是張三, 來自山東省, 今年25歲了!
1李四1993-05-29河北大專199327大家好,我是李四, 來自河北省, 今年27歲了!
2王五1995-03-14山西碩士199525大家好,我是王五, 來自山西省, 今年25歲了!
3趙六1992-07-08內蒙古本科199228大家好,我是趙六, 來自內蒙古省, 今年28歲了!
往期文章Python語法快速入門
Python網絡爬蟲與文本數據分析
讀完本文你就瞭解什麼是文本分析

綜述:文本分析在市場營銷研究中的應用
從記者的Twitter關注看他們稿件的黨派傾向?

Pandas時間序列數據操作
70G上市公司定期報告數據集
文本數據清洗之正則表達式
shreport庫: 批量下載上海證券交易所上市公司年報
Numpy和Pandas性能改善的方法和技巧
漂亮~pandas可以無縫銜接Bokeh
YelpDaset: 酒店管理類數據集10+G
半個小時學會Markdown標記語法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章