小案例: Pandas的apply方法

2021-02-20 大鄧和他的Python

插播一條廣告

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


NameBirthdayFromEdu0張三1995-12-31山東本科1李四1993-05-29河北大專2王五1995-03-14山西碩士3趙六1992-07-08內蒙古本科df.apply(func)或series.apply(func)

axis控制操作方向

列內計算

一般列內計算,實際上主要是對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


NameBirthdayFromEduYearAge0張三1995-12-31山東本科1995251李四1993-05-29河北大專1993272王五1995-03-14山西碩士1995253趙六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


NameBirthdayFromEduYearAgeIntro0張三1995-12-31山東本科199525大家好,我是張三, 來自山東省, 今年25歲了!1李四1993-05-29河北大專199327大家好,我是李四, 來自河北省, 今年27歲了!2王五1995-03-14山西碩士199525大家好,我是王五, 來自山西省, 今年25歲了!3趙六1992-07-08內蒙古本科199228大家好,我是趙六, 來自內蒙古省, 今年28歲了!
往期文章

稀罕作者

相關焦點

  • 不再糾結,一文詳解pandas中的map、apply、applymap、groupby、agg...
    文章的數據和代碼都已上傳至我的github倉庫:https://github.com/CNFeffery/DataScienceStudyNotes一、簡介pandas提供了很多方便簡潔的方法,用於對單列、多列數據進行批量運算或分組聚合運算,熟悉這些方法後可極大地提升數據分析的效率,也會使得你的代碼更加地優雅簡潔。
  • Pandas三大利器-map、apply、applymap
    、apply、applymap實際工作中,我們在利用 pandas進行數據處理的時候,經常會對數據框中的單行、多行(列也適用)甚至是整個數據進行某種相同方式的處理,比如將數據中的 sex欄位將 男替換成1,女替換成0。
  • 理解pandas中的apply和map的作用和異同
    Python爬蟲&文本數據分析(模塊Ⅰ)    1月11-16日  Stata 應用能力提升與實證前沿(模塊Ⅱ)  地點浙江 · 杭州(浙江工商大學)  pandas中的數據類型我們可以將pandas中的數據簡單的認為只有下面這兩種這兩種數據類型都有map和apply方法Series: apply和mapDataFrame: applySeries.mapSeries.map(arg)傳入的arg : 操作函數、字典或Series
  • pandas | 詳解DataFrame中的apply與applymap方法
    今天是pandas數據處理專題的第5篇文章,我們來聊聊pandas的一些高級運算。在上一篇文章當中,我們介紹了panads的一些計算方法,比如兩個dataframe的四則運算,以及dataframe填充Null的方法。今天這篇文章我們來聊聊dataframe中的廣播機制,以及apply函數的使用方法。
  • Pandas中第二好用的函數 | 優雅的apply
    我們單獨用一篇來為apply樹碑立傳,原因有二,一是因為apply函數極其靈活高效,甚至是重新定義了pandas的靈活,一旦熟練運用,在數據清洗和分析界可謂是「屠龍在手,天下我有」;二是apply概念相對晦澀,需要結合具體案例去咀嚼和實踐。
  • 用這幾個方法提高pandas運行速度
    本篇將要介紹幾種pandas中常用到的方法,對於這些方法使用存在哪些需要注意的問題,以及如何對它們進行速度提升。將datetime數據與時間序列一起使用的優點進行批量計算的最有效途徑通過HDFStore存儲數據節省時間▍使用Datetime數據節省時間我們來看一個例子。
  • 還在抱怨Pandas運行速度慢?這幾個方法會顛覆你的看法
    ▍pandas數據的循環操作仍然基於上面的數據,我們想添加一個新的特徵,但這個新的特徵是基於一些時間條件的,根據時長(小時)而變化,如下:因此,按照我們正常的做法就是使用apply方法寫一個函數,函數裡面寫好時間條件的邏輯代碼。
  • Pandas的函數應用及映射方法
    CDA數據分析師 出品在數據分析師日常的數據清洗工作中,經常需要對數據進行各種映射變換,通過Pandas可以非常方便地解決此問題,其提供了map()、apply()、mapapply()等方法,下面將一一詳細介紹這三個映射函數的用法及三者的區別。
  • Pandas的map()、apply()、applymap()
    一般來說,其實用 apply() 就夠了,因為都支持了。但這裡還是簡單記錄下。Python 中的 Pandas 庫,map()、apply()、applymap() 的區別。 下面分別舉例說明。apply()apply() 的功能是將一個自定義函數作用於 DataFrame 對象的行或者列。並且,apply() 也可以作用於每一列元素。
  • 還在抱怨pandas運行速度慢?這幾個方法會顛覆你的看法
    本篇將要介紹幾種pandas中常用到的方法,對於這些方法使用存在哪些需要注意的問題,以及如何對它們進行速度提升。將datetime數據與時間序列一起使用的優點進行批量計算的最有效途徑通過HDFStore存儲數據節省時間>>> import pandas as pd>>> pd.
  • 一行代碼讓 pandas 的 apply 速度飆到極致!
    pandas提速的方法回顧如果想要讓pandas提速,東哥總結有兩個方法:1. 向量化向量化是最優的方法,具體用法參考文章:還在抱怨pandas運行速度慢?這幾個方法會顛覆你的看法。舉個例子,我們將向量化定義為使用Numpy表示整個數組而不是元素的計算。
  • Pandas常見的性能優化方法
    3 apply、transform和agg時儘量使用內置函數在很多情況下會遇到groupby之後做一些統計值計算,而如果用內置函數的寫法會快很多。transform() 方法+內置方法,用時712msagg() 方法+內置方法,用時694ms建議3:在grouby、agg和transform時儘量使用內置函數計算。
  • Pandas性能優化:進階篇
    在這裡介紹一些更高級的pandas優化方法。1,採用apply%timeit df.apply( lambda row: row['a']*row['b'],axis=1)方法2,直接對series做乘法%timeit df['a']*df['b']
  • pandas100個騷操作:再見 for 循環!速度提升315倍!
    本次東哥介紹幾個常見的提速方法,一個比一個快,了解pandas本質,才能知道如何提速。一、使用 iterrows循環第一種可以通過pandas引入iterrows方法讓效率更高。這些都是一次產生一行的生成器方法,類似scrapy中使用的yield用法。.itertuples為每一行產生一個namedtuple,並且行的索引值作為元組的第一個元素。
  • 當pandas遇上數據類型問題
    而在pandas中,一般情況下會根據我們導入的數據,自動分配最合適的數據類型。但是有時候pandas也會犯錯,這時候我們就需要diy自定義數據類型。本文主要將pandas的dtype,如何進行數據類型的操作。pands數據類型數據類型是程式語言的基礎性概念,ta會告訴電腦如何存儲數據、如何操作數據。
  • pandas指南:做更高效的數據科學家
    今天我要告訴你們的是:在數據科學中,有一個軟體包是你們絕對需要學習的,那就是pandas。而pandas真正有趣的地方是,很多其他的包也在裡面。pandas是一個核心包,因此它具有來自其他各種包的特性。
  • 一道Pandas面試題:三種實現方法
    今天分享一個實用的小功能,這是我在工作中遇到的實際問題,也常被我拿來面試團隊的新人:求兩列時分(HH:mm)表示數據的分鐘數差值1 數據作為演示,構造如下四行兩列的數據,每一個單元格取值格式為使用p4 使用 split以上方法都不是最高效的,而根據:字符 split 是更加高效的實現。
  • Pandas數據處理map, apply, applymap, Transform詳解
    Series.apply(func, convert_dtype=True, args=(), **kwd)[source]DataFrame.apply
  • 【跟著stackoverflow學Pandas】- Pandas修改列的類型
    ,一般需要進行數據類型的轉化,這篇文章就介紹pandas裡面的數據類型及轉換。下面我們推薦幾種方法pd.to_numeric對於明顯是數值的數據,轉換類型直接採用 pd.to_numeric 就可以了,如果數據既有數值型又有字符型,那麼我們就要根據情況區別對待了。
  • 【數據分析】Pandas
    pip install pandas引用方法:import pandas as pd2、SeriesSeries是一種類似於一維數組的對象,由一組數據和一組與之相關的數據標籤(索引)因為在pandas當中使用整數索引取值是優先以標籤解釋的,而不是下標sr1[1]解決方法:loc屬性  # 以標籤解釋iloc屬性  # 以下標解釋