22

小案例: Pandas的apply方法

 4 years ago
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.
neoserver,ios ssh client

插播一条广告

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标记语法


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK