插播一條廣告

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歲了!

往期文章

Python語法快速入門

Python網絡爬蟲與文本數據分析

讀完本文你就瞭解什麼是文本分析

綜述:文本分析在市場營銷研究中的應用

從記者的Twitter關注看他們稿件的黨派傾向?

Pandas時間序列數據操作

70G上市公司定期報告數據集

文本數據清洗之正則表達式

shreport庫: 批量下載上海證券交易所上市公司年報

Numpy和Pandas性能改善的方法和技巧

漂亮~pandas可以無縫銜接Bokeh

YelpDaset: 酒店管理類數據集10+G

半個小時學會Markdown標記語法

相關文章